将变量求值为bash中的变量
我有下面的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时,
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