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

时间:2014-12-16 16:14:35

标签: bash shell

我想使用echo命令的输出作为变量名。像,

var1="test"
var2="script"
echo ${$1}

如果$1是var1,则应打印test。

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

2 个答案:

答案 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
相关问题