下面是我的程序,a.sh
:
A=10 B=20 C=0 D=1
for var in {A,B,C,D}
do
if [ $var = 0 ]
then
echo "$var value is 0"
else
echo "Ok"
fi
done
Run Code Online (Sandbox Code Playgroud)
结果是:
# sh a.sh
Ok
Ok
0 value is 0 <==== Instead of this I want "C value is 0"
Ok
Run Code Online (Sandbox Code Playgroud)
我们应该怎么做 ?
与bash
:
A=10
B=20
C=0
D=1
for var in A B C D; do
if [ ${!var} -eq 0 ]; then
echo "$var value is 0"
else
echo "Ok"
fi
done
Run Code Online (Sandbox Code Playgroud)
使用-eq
比较整数值(或使用(( ${!var} == 0 ))
或者(( !${!var} ))
是同样的事情),并使用${!var}
获得其名称存储在变量中的变量的值var
。
或者,更简洁但基本相同(仍在 中bash
):
for var in A B C D E; do
case ${!var} in
0) printf '%s value is 0\n' "$var" ;;
*) echo 'Ok' ;;
esac
done
Run Code Online (Sandbox Code Playgroud)
这将值视为字符串,而不是整数。