神话讨论shell变量扩展

时间:2013-07-29 22:11:53

标签: shell variables environment-variables variable-expansion

最近,我听到一个故事,在shell脚本中使用大括号${variable}中的变量时,从环境变量中获取其值与同名(如果存在),但如果是用作$variable一个从本地变量获取其预期值(并且应该是).. 是真的

因为我知道$...${...}是等效形式,我从未遇到过这样的问题。除非是过去的误解,否则有人可以说出这种情况可能发生的情况。

1 个答案:

答案 0 :(得分:1)

这个故事是无稽之谈,就变量范围而言,两种形式都是等价的。以下是the standard所说的内容:

${parameter}
     

parameter的值(如果有)将被替换。

     

参数名称或符号可以用大括号括起来,除了具有多个数字的位置参数或参数后面跟一个可以解释为名称一部分的字符外,这些大括号是可选的。匹配的右括号将通过计算括号级别,跳过封闭的引用字符串和命令替换来确定。

     

如果参数名称或符号未包含在大括号中,则扩展将使用最长的有效名称(请参阅XBD规范中的名称,词汇表),无论该名称表示的符号是否存在。当shell扫描其输入以确定名称的边界时,它不受其已知定义的名称的限制。例如,如果F是已定义的shell变量,则命令为:

echo $Fred
     

不会回显$F后跟red的值;它会选择最长的有效名称Fred,在这种情况下可能会取消设置。