“$ {!var}”在shell脚本中的含义是什么?

时间:2016-12-02 09:13:46

标签: bash shell variable-expansion

我有一个具有以下条件的代码块,不确定它究竟是做什么的。

Used by {@link A.B#setC(A.C)}

1 个答案:

答案 0 :(得分:10)

这称为可变间接扩展。

$ hello="this is some text"   # we set $hello
$ var="hello"                 # $var is "hello"
$ echo "${!var}"              # we print the variable linked by $var's content
this is some text

如您所见,这是一种定义“变量变量”的方法。也就是说,使用其内容是另一个变量名称的变量。

来自Bash Reference Manual → 3.5.3 Shell Parameter Expansion

  

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