Bash间接变量引用

8
foo='abc'
bar='xyz'
var=bar

当我有var时,如何访问'xyz'?

我尝试了以下方法:

$(echo $var)

并且

$(eval echo $var)

我只是得到了“bar: command not found”错误提示。
1个回答

17

使用bash间接变量引用:

${!var}
当然可以使用eval执行,但不建议:
eval 'echo $'"$var"

为什么:

$ bar=xyz

$ var='bar;whoami'

$ eval 'echo $'"$var"
xyz
spamegg

whoami 命令也作为 eval 评估的一部分进行评估,想象一下如果是一个破坏性命令而不是 whoami


例子:

$ bar='xyz'

$ var=bar

$ echo "${!var}"
xyz

$ eval 'echo $'"$var"
xyz

很好。但如果您可以解释一下为什么不建议使用eval,那会让这更加优雅。 :) ++ - sjsam
此外,正确的术语应该是间接引用,因为引用可能既指直接引用又指间接引用。 - sjsam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接