8

我在这个问题上摸不着头脑,找不到关于它的 bash 参考资料。

在下面的代码中

host_color=${uphost}_host_color
host_color=${!host_color}

第二行在做什么?在这种情况下 !operator 做了什么?

4

2 回答 2

9

这是间接引用的缩写形式。

$ foo=bar
$ bar=bas
$ echo ${!foo}
bas

看似相似的构造${!foo*}扩展为名称以 foo 开头的所有变量的名称

$ foo1=x
$ foo2=y
$ echo ${!foo*}
foo1 foo2
于 2012-04-25T13:47:32.487 回答
1

来自 b ash 手册

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

于 2012-04-25T13:45:49.067 回答