我有这个:
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
)。