什么呢! (感叹号)在使用unix中的变量时标记花括号({})

时间:2017-12-01 11:35:00

标签: bash shell sh

var 成为变量,并为其分配值 / home / user ,如下所示

var=/home/user

使用此变量时,我已使用以下两种格式

看到它
1) cd ${var}
2) cd ${!var}

有什么区别?对我来说第二个选项不起作用,如果我 echo 第二个选项返回空。

1 个答案:

答案 0 :(得分:2)

在这种情况下,它是间接扩展(a)var变量被扩展为创建另一个变量名,然后 是再次扩展以获得最终结果:

pax$ abc=def
pax$ def=ghi
pax$ echo ${abc}   # abc -> def,        one level.
def
pax$ echo ${!abc}  # abc -> def -> ghi, two levels.
ghi

来自bash手册页:

  

如果参数的第一个字符是感叹号(!),它会引入一个变量间接的级别。 Bash使用从参数的其余部分形成的变量的值作为变量的名称;然后展开此变量,并将该值用于替换的其余部分,而不是参数本身的值。这被称为间接扩张。

(a)在其他情况下,它可能会有其他更复杂的效果,例如当您使用${!prefix*}${!name[@]}但您的情况更简单时。