Bash - 变量变量

use*_*454 39 variables bash

我有变量$foo="something",想使用:

bar="foo"; echo $($bar)
Run Code Online (Sandbox Code Playgroud)

让某些东西得到回应.

dAm*_*m2K 73

在bash中,您可以使用$ {!variable}来使用变量变量.

foo="something"
bar="foo"
echo "${!bar}"
Run Code Online (Sandbox Code Playgroud)

  • 在“sh”中,它表示错误的替换。知道如何在“sh”中做到这一点吗? (3认同)

bis*_*hop 7

接受的答案很棒.但是,@ Edison问如何对数组做同样的事情.诀窍是你希望变量保持"[@]",以便用"!"扩展数组.检查此函数以转储变量:

$ function dump_variables() {
    for var in "$@"; do
        echo "$var=${!var}"
    done
}
$ STRING="Hello World"
$ ARRAY=("ab" "cd")
$ dump_variables STRING ARRAY ARRAY[@]
Run Code Online (Sandbox Code Playgroud)

这输出:

STRING=Hello World
ARRAY=ab
ARRAY[@]=ab cd
Run Code Online (Sandbox Code Playgroud)

当作为公正给出时ARRAY,第一个元素显示为由...扩展的元素!.通过给出ARRAY[@]格式,您可以获得数组及其所有值的扩展.


mkb*_*mkb 6

eval echo \"\$$bar\" 会做的.

  • 注意[eval`的[安全含义](http://mywiki.wooledge.org/BashFAQ/048). (6认同)
  • 该解决方案的优势是可与非Bash外壳(例如,嵌入式系统或Docker容器之类的轻量级环境)兼容POSIX。您可以将值分配给另一个变量,如下所示:```sh var = $(eval echo \“ \ $$ bar \”)``` (2认同)