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
?这如何处理数组吗?@Edisonfoo1=“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”'[@]}”)
。这项研究更深入。