Bash间接引用:$ {!t}表示法和eval

时间:2015-03-18 13:19:01

标签: bash eval

我刚刚提到了bash的间接引用${!t}的简短表示法。我曾经\$$t之前的eval种间接引用。但是,使用${!t}表示法似乎我不需要这样做:

# d=e e=f; eval y=${!d}; echo $y
f
# d=e e=f; y=${!d}; echo $y
f

为什么我们这里不需要评估?它被隐含地称为吗?

1 个答案:

答案 0 :(得分:2)

来自Bash参考手册的3.5.3 Shell Parameter Expansion部分:

  

如果参数的第一个字符是感叹号(!),它会引入一个变量间接的级别。 Bash使用从参数的其余部分形成的变量的值作为变量的名称;然后展开此变量,并将该值用于替换的其余部分,而不是参数本身的值。这被称为间接扩张。例外情况是下面描述的$ {!prefix *}和$ {!name [@]}的扩展。感叹号必须紧跟左括号以引入间接。

间接的eval \$$t版本手动导致对行内容的两次评估。第一个获取间接变量名称,第二个获取其值。