使用shell命令的输出作为变量

San*_*mar 5 bash shell

我想使用echo命令的输出作为变量名.喜欢,

var1="test"
var2="script"
echo ${$1}
Run Code Online (Sandbox Code Playgroud)

如果$1是var1 echo应该打印测试.

${$1} 抛出错误"糟糕的替代"

fre*_*ini 3

您想要的称为变量扩展(或间接扩展)。你必须使用语法${!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[@]} 的扩展。感叹号必须紧跟在左大括号之后才能引入间接关系。

  • `${!prefix*}` 和 `${!prefix@}` 扩展与这里的目标并不真正相关。 (2认同)