我希望将echo命令的输出作为变量名使用。比如:
var1="test"
var2="script"
echo ${$1}
如果
$1
是var1,那么echo应该输出test。
${$1}
会抛出错误"bad substitution"。${!var}
:~$ cat s.sh
var1="test"
var2="script"
echo ${!1}
~$ ./s.sh var1
test
~$ ./s.sh var2
script
来自man bash
:
${parameter}
参数的值被替换。当参数是一个超过一位数字的位置参数时,或者当参数后面跟着一个不被解释为其名称一部分的字符时,需要使用大括号。
如果参数的第一个字符是感叹号(!),则会引入变量间接性级别。Bash使用由参数的其余部分形成的变量的值作为变量的名称;然后扩展此变量,并在替换的其余部分中使用该值,而不是参数本身的值。这称为间接扩展。以下是${!prefix*}和${!name[@]}扩展的例外情况。感叹号必须紧随左括号之后才能引入间接性。
$ foo='bar'
$ baz='foo'
$ echo ${!baz}
bar
${!prefix*}
和${!prefix@}
扩展并不是这里的目标所关注的。 - Etan Reisnerecho ${!var1}
和echo ${!var1*}
都会输出test
。 - fredtantini${!prefix*}
扩展会扩展为变量名称而不是值。但是,您可以在间接扩展中使用这些名称本身来获取值。 - Etan Reisner