Bash变量

Bash变量,bash,variables,Bash,Variables,我有变量$foo=“something”,希望使用: bar="foo"; echo $($bar) 要得到“某物”的回音。eval echo\“\$$bar\”就可以了。在bash中,可以使用${!variable}来使用变量 foo="something" bar="foo" echo "${!bar}" # something 公认的答案很好。然而,@Edison询问如何对阵列执行同样的操作。诀窍是您希望您的变量包含“[@]

我有变量
$foo=“something”
,希望使用:

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

要得到“某物”的回音。

eval echo\“\$$bar\”
就可以了。

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

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

# something

公认的答案很好。然而,@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

当作为
数组给出时,第一个元素显示为
展开的元素。通过给出
数组[@]
格式,可以扩展数组及其所有值。

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

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

请看。此外,您不应该尝试在作业的左侧使用美元符号。请注意。此解决方案的好处是与非Bash Shell(例如,嵌入式系统或Docker容器等轻量级环境)兼容POSIX。您可以将该值分配给另一个变量,如:
sh var=$(eval echo\“\$$bar\”)
中的
sh
表示替换错误。你知道如何在
sh
?这如何处理数组吗?@Edison
foo1=“something1”foo2=“something2”bar[0]=“foo1”bar[1]=“foo2”echo${!bar[0]}echo${!bar[1]}
我最后做了类似的事情“read-a subNames@Edison另请参见。关于处理阵列,这是一个很好的观点。知道如何获得数组的索引吗?指示这通常是通过
${!ARRAY[@]}
完成的,这似乎与变量间接寻址语法冲突。@dimo414是的,通过间接寻址获取密钥更为棘手。您只需传递名称,然后在方法中进行扩展:
local-a'keys=(“${!”“$var”'[@]}”)
。这项研究更深入。