在 for 循环中 echo 变量名

在 for 循环中 echo 变量名

我有这个:

test1="1"
test2="2"
test3="3"

for i in "$test1" "$test2" "$test3"; do
        echo "$i"
done ;

我想回显$i变量名称,而不是其内容。

回显输出应为“test1”、“test2”或“test3”

我怎样才能做到这一点?

答案1

如果你真的想这样做,就这样做:

#!/bin/bash
test1='1'
test2='2'
test3='3'
for v in "test1" "test2" "test3"; do
        echo "The variable's name is $v"
        echo "The variable's content is ${!v}"
done 

但你可能会更喜欢使用数组而不是动态变量名,因为这可能被视为一种不好的做法,并使您的代码更难以理解。所以考虑一下这个更好的形式:

#!/bin/bash
test[0]='1'
test[1]='2'
test[2]='3'
for ((i=0;i<=2;i++)); do
        echo "The variable's name is \$test[$i]"
        echo "The variable's content is ${test[$i]}"

done 

答案2

使用单引号:

for i in '$test1' '$test2' '$test3'; do
    echo "$i"
done

否则,用反斜杠转义美元符号:

for i in \$test1 \$test2 \$test3; do
    echo "$i"
done

答案3

的意思for i in "$test1" "$test2" "$test3"是:$i将持有内容三个变量 test1、test2、test3 - 实际上包含:1、2、3

如果您想打印测试1,测试2测试3你应该在没有$符号的情况下调用它们,即实际的名称,而不是它们的值

以下代码(变量之前没有$前面的代码test1/2/3将打印您想要的内容:

test1="1"
test2="2"
test3="3"

for i in "test1" "test2" "test3"; do
        echo "$i"
done ;

执行结果:

test1
test2
test3

答案4

ksh93 或 Bash:

$ test1=aa; test2=bb; test3=cc
$ for x in "${!test@}" ; do echo "$x" ; done 
test1
test2
test3

(请注意,变量按词汇顺序展开(因此test10会出现在 ) 之前test2)。

相关内容