我正在阅读 ”Bash 初学者指南“。 它说:
如果第一个字符为PARAMETER
是一个感叹号,Bash 使用由其余部分形成的变量值PARAMETER
作为变量的名称;然后扩展该变量,并在其余替换中使用该值,而不是PARAMETER
本身。这称为间接扩展。
给出的例子是:
franky ~> echo ${!N*}
NNTPPORT NNTPSERVER NPX_PLUGIN_PATH
这里我不太明白:
由其余部分形成的变量的值PARAMETER
As the PARAMETER
只是!N*
, then
其余的PARAMETER
is just N*
。这怎么能形成一个变量呢? Bash 是否在那里搜索了所有可能的命令?
如果您阅读了bash
手册页,它基本上证实了您所说的:
如果参数的第一个字符是感叹号(!
),引入了一定程度的变量间接寻址。 Bash 使用由参数的其余部分形成的变量的值作为变量的名称;然后扩展该变量,并在其余替换中使用该值,而不是参数本身的值。这称为间接扩展。
然而,从那里继续阅读:
例外情况是以下扩展${!prefix*}
and ${!name[@]}
如下面所描述的。
${!prefix*}
名称匹配前缀。扩展为名称以前缀开头的变量名称,由前缀的第一个字符分隔IFS
特殊变量。
换句话说,你的具体例子${!N*}
is an 例外按照你引用的规则。它does但是,在预期情况下可以按照广告中的方式工作,例如:
$ export xyzzy=plugh ; export plugh=cave
$ echo ${xyzzy} # normal, xyzzy to plugh
plugh
$ echo ${!xyzzy} # indirection, xyzzy to plugh to cave
cave
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)