52

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

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

让“某事”得到回应。

4

4 回答 4

95

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

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

# something
于 2012-05-25T15:49:08.250 回答
8

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

于 2012-05-25T15:44:52.573 回答
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

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

于 2014-08-06T18:10:49.070 回答
1

为了更清楚如何处理数组:

arr=( 'a' 'b' 'c' )
# construct a var assigning the string representation 
# of the variable (array) as its value:
var=arr[@]         
echo "${!var}"
于 2016-05-16T05:56:24.273 回答