是否可以在bash中从其他变量构建变量名?

Ste*_*hen 29 variables bash

我为这个非常可怕的标题道歉 - 以及质量差的帖子 - 但我基本上想要做的是:

for I in 1 2 3 4
    echo $VAR$I # echo the contents of $VAR1, $VAR2, $VAR3, etc.
Run Code Online (Sandbox Code Playgroud)

显然上面的方法不起作用 - 它会(我认为)尝试$VAR$I在Bash中回显一个名为Is this 的变量吗?

Ign*_*ams 35

是的,但不要这样做.请改用数组.

如果你仍坚持这样做......

$ foo1=123
$ bar=foo1
$ echo "${!bar}"
123
Run Code Online (Sandbox Code Playgroud)

  • +1但不要这样做.请改用数组. (5认同)

Dum*_*001 10

for I in 1 2 3 4 5; do
    TMP="VAR$I"
    echo ${!TMP}
done
Run Code Online (Sandbox Code Playgroud)

我有一个一般规则,如果我需要间接访问变量(同上数组),那么是时候将脚本从shell转换为Perl/Python/etc.尽管可能在shell中进行高级编码很快变得一团糟.


pax*_*blo 5

您应该考虑将bash数组用于此类工作:

pax> set arr=(9 8 7 6)
pax> set idx=2
pax> echo ${arr[!idx]}
7
Run Code Online (Sandbox Code Playgroud)