我有一个具有以下条件的代码块,不确定它究竟是做什么的。
Used by {@link A.B#setC(A.C)}
答案 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 [@]}的扩展。感叹号必须紧跟左括号以引入间接。