什么是间接扩张?${!var*}是什么意思?

什么是间接扩张?${!var*}是什么意思?

我在读“初学者指南“.上面写着:

如果第一个字符PARAMETER是一个感叹号,Bash使用从PARAMETER作为变量的名称;然后展开该变量,该值用于替换的其余部分,而不是PARAMETER本身。这就是所谓的间接膨胀。

举的例子如下:

franky ~> echo ${!N*}NNTPPORT NNTPSERVER NPX_PLUGIN_PATH

我不太明白:

的其余部分形成的变量的值。PARAMETER

就像PARAMETER只是!N*,然后

其余部分PARAMETER

只是N*..这怎么能形成一个变量呢?巴什在那里搜索了所有可能的命令吗?


森栏
浏览 1296回答 3
3回答

慕标琳琳

如果你读到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

收到一只叮咚

当给定的“间接”以*就像这里一样。在本例中,它给出了以指定的部分开头的所有变量名(N在这里)。Bash之所以能做到这一点,是因为它跟踪变量并知道哪些变量存在。真正的间接是:假设我有一个变量$VARIABLE设为42,我还有另一个变量$NAME设为VARIABLE. ${!NAME}会给我42..您可以使用一个变量的值来告诉您另一个变量的名称:$ NAME="VARIABLE"$ VARIABLE=42$ echo ${!NAME}42

慕运维8079593

之后搜索所有可能的变量展开。如果你做了:echo ${!NP*}你只会得到NPX_PLUGIN_PATH.考虑以下示例::~> export myVar="hi":~> echo ${!my*}     myVar:~> export ${!my*}="bye":~> echo $myVar     bye
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python