什么是间接扩张?${!var*}是什么意思?我在读“初学者指南“.上面写着:如果第一个字符PARAMETER是一个感叹号,Bash使用从PARAMETER作为变量的名称;然后展开该变量,该值用于替换的其余部分,而不是PARAMETER本身。这就是所谓的间接膨胀。举的例子如下:franky ~> echo ${!N*}NNTPPORT NNTPSERVER NPX_PLUGIN_PATH我不太明白:的其余部分形成的变量的值。PARAMETER就像PARAMETER只是!N*,然后其余部分PARAMETER只是N*..这怎么能形成一个变量呢?巴什在那里搜索了所有可能的命令吗?
3 回答
慕标琳琳
TA贡献1830条经验 获得超9个赞
bash
如果参数的第一个字符是感叹号( !
),引入了一个变量间接级别。Bash使用参数其余部分形成的变量的值作为变量的名称;然后展开该变量,该值用于替换的其余部分,而不是参数本身的值。这就是所谓的间接膨胀。
这方面的例外是 ${!prefix*}
和 ${!name[@]}
如下所述。
${!prefix*}
名称匹配前缀。展开为以前缀开头的变量的名称,以 IFS
特殊变量。
${!N*}
$ export xyzzy=plugh ; export plugh=cave $ echo ${xyzzy} # normal, xyzzy to plughplugh $ echo ${!xyzzy} # indirection, xyzzy to plugh to cavecave
收到一只叮咚
TA贡献1821条经验 获得超4个赞
*
N
$VARIABLE
42
$NAME
VARIABLE
. ${!NAME}
42
$ NAME="VARIABLE"
$ VARIABLE=42
$ echo ${!NAME}
42
慕运维8079593
TA贡献1876条经验 获得超5个赞
echo ${!NP*}
NPX_PLUGIN_PATH
.
:~> export myVar="hi":~> echo ${!my*} myVar:~> export ${!my*}="bye":~> echo $myVar bye
添加回答
举报
0/150
提交
取消