在bash中将变量评估为变量

thi*_*ter 1 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
Run Code Online (Sandbox Code Playgroud)

我希望当我遍历数组时,它将打印牛,山羊乌鸦而不是alpha,beta和gama.我如何评估这个像$($ i)这样的东西,其中$ i在评估为alpha时,它将其视为$ alpha并对牛进行评估.

Sea*_*ght 5

您可以使用参数扩展:

echo ${!i}
Run Code Online (Sandbox Code Playgroud)

引自手册:

如果参数的第一个字符是感叹号(!),它会引入一个变量间接的级别.Bash使用从参数的其余部分形成的变量的值作为变量的名称; 然后展开此变量,并将该值用于替换的其余部分,而不是参数本身的值.这被称为间接扩张.例外情况是下面描述的$ {!prefix*}和$ {!name [@]}的扩展.感叹号必须紧跟左支撑,以引入间接.