我为这个非常可怕的标题道歉 - 以及质量差的帖子 - 但我基本上想做的是:
for I in 1 2 3 4
echo $VAR$I # echo the contents of $VAR1, $VAR2, $VAR3, etc.
显然上面的内容不起作用 - 它会(我认为)尝试并回显一个名为$VAR$I
的变量,这在Bash中是否可行?
答案 0 :(得分:35)
是的,但不要这样做。改为使用数组。
如果你仍坚持这样做......
$ foo1=123
$ bar=foo1
$ echo "${!bar}"
123
答案 1 :(得分:10)
for I in 1 2 3 4 5; do
TMP="VAR$I"
echo ${!TMP}
done
我有一个通用规则,如果我需要间接访问变量(同上数组),那么是时候将脚本从shell转换为Perl / Python / etc。尽管可能很快就会在shell中进行高级编码变得一团糟。
答案 2 :(得分:4)
您应该考虑使用bash
数组进行此类工作:
pax> set arr=(9 8 7 6)
pax> set idx=2
pax> echo ${arr[!idx]}
7
答案 3 :(得分:4)
对于您不想将变量重构为数组的情况......
单程......
$ for I in 1 2 3 4; do TEMP=VAR$I ; echo ${!TEMP} ; done
另一种方式......
$ for I in 1 2 3 4; do eval echo \$$(eval echo VAR$I) ; done
我还没有找到一种更简单的方法。例如,这不起作用......
$ for I in 1 2 3 4; do echo ${!VAR$I} ; done
bash: ${!VAR$I}: bad substitution
答案 4 :(得分:3)
for I in {1..5}; do
echo $((VAR$I))
done
答案 5 :(得分:1)
答案 6 :(得分:0)
这绝对看起来像阵列类型的情况。这是一个关于如何在bash中使用数组的非常好的讨论(有很多例子)的链接:Arrays