我想使用echo命令的输出作为变量名。像,
var1="test"
var2="script"
echo ${$1}
如果$1
是var1,则应打印test。
${$1}
抛出错误"糟糕的替换"
答案 0 :(得分:3)
您想要的是variable expansion(或间接扩展)。您必须使用语法${!var}
:
~$ cat s.sh
var1="test"
var2="script"
echo ${!1}
~$ ./s.sh var1
test
~$ ./s.sh var2
script
来自man bash
:
${parameter}
参数的值被替换。当参数是具有多个数字的位置参数时,或者当参数后跟一个不被解释为其名称一部分的字符时,需要括号。
如果参数的第一个字符是感叹号(!),则引入一个变量间接的级别。 Bash使用从参数的其余部分形成的变量的值作为变量的名称;然后展开此变量,并将该值用于替换的其余部分,而不是参数本身的值。这被称为间接扩张。例外情况是下面描述的$ {!prefix *}和$ {!name [@]}的扩展。感叹号必须紧跟左括号以引入间接。
答案 1 :(得分:0)
你可以这样做:
$ foo='bar'
$ baz='foo'
$ echo ${!baz}
bar