我想使用echo命令的输出作为变量名.喜欢,
var1="test"
var2="script"
echo ${$1}
Run Code Online (Sandbox Code Playgroud)
如果$1是var1 echo应该打印测试.
${$1} 抛出错误"糟糕的替代"
您想要的称为变量扩展(或间接扩展)。你必须使用语法${!var}:
~$ cat s.sh
var1="test"
var2="script"
echo ${!1}
~$ ./s.sh var1
test
~$ ./s.sh var2
script
Run Code Online (Sandbox Code Playgroud)
从man bash:
${parameter}参数的值被替换。当参数是一个多于一位数字的位置参数时,或者当参数后面跟着一个不被解释为其名称一部分的字符时,需要使用大括号。
如果参数的第一个字符是感叹号 (!),则引入一级变量间接寻址。Bash 使用由参数的其余部分形成的变量的值作为变量的名称;然后扩展该变量,并在其余替换中使用该值,而不是参数本身的值。这称为间接扩展。例外情况是下面描述的 ${!prefix*} 和 ${!name[@]} 的扩展。感叹号必须紧跟在左大括号之后才能引入间接关系。