将变量求值为bash中的变量

将变量求值为bash中的变量,bash,Bash,我有下面的bash脚本 declare -a input=('alpha' 'beta' 'gama'); alpha="cow" beta="goat" gama="crow" for i in "${input[@]}" do echo $(eval "echo $i") [this is wrong logic] done 我希望当我迭代数组时,它将打印cow、goat crow,而不是alpha、beta和gama。 我如何计算它,比如$($i),其中$i计算为alpha时,

我有下面的bash脚本

declare -a input=('alpha'  'beta'  'gama');
alpha="cow"
beta="goat"
gama="crow"
for i in "${input[@]}"
do
   echo $(eval "echo $i") [this is wrong logic]
done
我希望当我迭代数组时,它将打印cow、goat crow,而不是alpha、beta和gama。 我如何计算它,比如$($i),其中$i计算为alpha时,它将其视为$alpha,并将其计算为cow。

您可以使用:

引述自:

如果参数的第一个字符是感叹号(!),则 引入了一个级别的变量间接寻址。Bash使用 由参数的其余部分构成的变量,作为 变量然后展开此变量,并在 替换的其余部分,而不是参数本身的值。 这就是所谓的间接扩张。例外情况是 下面介绍了${!prefix*}和${!name[@]}的扩展。这个 感叹号必须紧跟在左大括号之后,以便 引入间接性

您可以使用:

引述自:

如果参数的第一个字符是感叹号(!),则 引入了一个级别的变量间接寻址。Bash使用 由参数的其余部分构成的变量,作为 变量然后展开此变量,并在 替换的其余部分,而不是参数本身的值。 这就是所谓的间接扩张。例外情况是 下面介绍了${!prefix*}和${!name[@]}的扩展。这个 感叹号必须紧跟在左大括号之后,以便 引入间接性

使用关联数组(bash v4.3)

关联数组不维护键的顺序。如果这很重要,您可以保留一个单独的密钥列表:

declare -a keys=( alpha beta gamma )
for key in "${keys[@]}"; do echo "$key -> ${input[$key]}"; done
使用关联数组(bash v4.3)

关联数组不维护键的顺序。如果这很重要,您可以保留一个单独的密钥列表:

declare -a keys=( alpha beta gamma )
for key in "${keys[@]}"; do echo "$key -> ${input[$key]}"; done
gamma -> crow
alpha -> cow
beta -> goat
declare -a keys=( alpha beta gamma )
for key in "${keys[@]}"; do echo "$key -> ${input[$key]}"; done
alpha -> cow
beta -> goat
gamma -> crow