让 var 成为变量,并为其分配值 / home / user ,如下所示
var=/home/user
使用此变量时,我已使用以下两种格式
看到它1) cd ${var}
2) cd ${!var}
有什么区别?对我来说第二个选项不起作用,如果我 echo 第二个选项返回空。
答案 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[@]}
但您的情况更简单时。