Bash变量引用

ben*_*wiz 5 variables bash reference

foo='abc'
bar='xyz'
var=bar
Run Code Online (Sandbox Code Playgroud)

我什么'xyz'时候可以访问var

我试过了:

$(echo $var)
Run Code Online (Sandbox Code Playgroud)

$(eval echo $var)
Run Code Online (Sandbox Code Playgroud)

我得到了 bar: command not found

hee*_*ayl 8

使用bash间接变量引用:

${!var}
Run Code Online (Sandbox Code Playgroud)

当然可以用eval,不推荐:

eval 'echo $'"$var"
Run Code Online (Sandbox Code Playgroud)

为什么:

$ bar=xyz

$ var='bar;whoami'

$ eval 'echo $'"$var"
xyz
spamegg
Run Code Online (Sandbox Code Playgroud)

whoami正在评估Th命令作为评估的一部分eval,想象一个破坏性命令而不是whoami.


例:

$ bar='xyz'

$ var=bar

$ echo "${!var}"
xyz

$ eval 'echo $'"$var"
xyz
Run Code Online (Sandbox Code Playgroud)