1

最近,我听到一个故事,在shell脚本中使用花括号中的变量${variable}时,从环境变量中获取其值(如果存在),但如果它被用作$variable一个从本地变量获取其值(因为它应该是).. 是真的吗Mythbusting shell变量扩展

因为据我所知$...${...}是等效的形式,我从来没有遇到过这样的问题。除非是过去的误解,否则有人可能会说这种情况是可能的。

+2

这应该是几乎微不足道的验证自己。没有? –

+1

@MattBall我尝试了几个炮弹,无法复制,我也不会认为这只是一个笑话 – rook

回答

1

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

${parameter} 

值,如果有的话,parameter将被取代。

参数名称或符号可以用大括号括起来,除了位置参数不止一个数字,或者参数后面跟着一个可以解释为名称一部分的字符之外,大括号是可选的。匹配的大括号将通过计算大括号水平,跳过封闭的引用字符串和命令替换来确定。

如果参数名称或符号未包含在花括号中,则扩展名将使用最长的有效名称(请参见XBD规范术语表中的名称),不管该名称表示的符号是否存在。当shell扫描其输入以确定名称的边界时,它不会被已知定义的名称所限制。例如,如果F是定义的变量壳,命令:

echo $Fred 

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