如何在 shell 脚本中打印变量名称而不是其值?

如何在 shell 脚本中打印变量名称而不是其值?

下面是我的程序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

这会将值视为字符串,而不是整数。

相关内容