Bash${!变量}

Bash${!变量},bash,Bash,这件事让我摸不着头脑,找不到bash的参考资料来谈论它 在下面的代码中 host_color=${uphost}_host_color host_color=${!host_color} 第二行在做什么?这是什么意思!在这种情况下,操作员要做什么?从b: 如果参数的第一个字符是感叹号(!),则 引入了变量间接层次。Bash使用 由参数的其余部分组成的变量,作为 变量然后展开此变量,并在 替换的其余部分,而不是参数本身的值。 这就是所谓的间接扩张。例外情况是 下面介绍了${!prefix*}和$

这件事让我摸不着头脑,找不到bash的参考资料来谈论它

在下面的代码中

host_color=${uphost}_host_color
host_color=${!host_color}
第二行在做什么?这是什么意思!在这种情况下,操作员要做什么?

从b:

如果参数的第一个字符是感叹号(!),则 引入了变量间接层次。Bash使用 由参数的其余部分组成的变量,作为 变量然后展开此变量,并在 替换的其余部分,而不是参数本身的值。 这就是所谓的间接扩张。例外情况是 下面介绍了${!prefix*}和${!name[@]}的扩展

这是一个缩写形式

看似相似的结构扩展到名称以foo开头的所有变量的名称:


${!prefix*}与${!prefix}相同吗?我想这将是手册页中的下一个条目,因为@Oliver的帖子没有“*”或“@”:
${!name[@]}
-“如果name是数组变量,则扩展到name中指定的数组索引(键)列表。如果name不是数组,则在name设置后扩展到0。”@Olivier:no,它们不一样。我已经添加了bash手册中的相关内容。您已经了解了,谢谢。现在它完全有意义了,host_color=green,green是另一个带有颜色代码的变量。+1似乎是@Oliver的代码所做的-基本上将
host_color
的值设置为
${uphost}\u host_color
。与将其设置为
${${uphost}\u host\u color}
没有区别,对吗?
$ foo=bar
$ bar=bas
$ echo ${!foo}
bas
$ foo1=x
$ foo2=y
$ echo ${!foo*}
foo1 foo2