下面是我的程序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
结果是:
# sh a.sh
Ok
Ok
0 value is 0 <==== Instead of this I want "C value is 0"
Ok
我们应该怎么做 ?
答案1
和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
use-eq
比较整数值(或使用(( ${!var} == 0 ))
or(( !${!var} ))
是同一件事),并 use${!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
这会将值视为字符串,而不是整数。