Bash - 变量变量

时间:2012-05-25 15:40:11

标签: bash variables

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

bar="foo"; echo $($bar)

得到"某事"呼应。

4 个答案:

答案 0 :(得分:65)

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

foo="something"
bar="foo"
echo "${!bar}"

答案 1 :(得分:7)

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

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

输出:

STRING=Hello World
ARRAY=ab
ARRAY[@]=ab cd

当仅作为ARRAY给出时,第一个元素显示为!展开的内容。通过提供ARRAY[@]格式,您可以获得数组及其所有值的扩展。

答案 2 :(得分:5)

eval echo \"\$$bar\"会这样做。

答案 3 :(得分:1)

为了更清楚地说明如何使用数组:

arr=( 'a' 'b' 'c' )
# construct a var assigning the string representation 
# of the variable (array) as its value:
var=arr[@]         
echo "${!var}"