最近,我听到一个故事,在shell脚本中使用花括号中的变量${variable}
时,从环境变量中获取其值(如果存在),但如果它被用作$variable
一个从本地变量获取其值(因为它应该是).. 是真的吗?Mythbusting shell变量扩展
因为据我所知$...
和${...}
是等效的形式,我从来没有遇到过这样的问题。除非是过去的误解,否则有人可能会说这种情况是可能的。
最近,我听到一个故事,在shell脚本中使用花括号中的变量${variable}
时,从环境变量中获取其值(如果存在),但如果它被用作$variable
一个从本地变量获取其值(因为它应该是).. 是真的吗?Mythbusting shell变量扩展
因为据我所知$...
和${...}
是等效的形式,我从来没有遇到过这样的问题。除非是过去的误解,否则有人可能会说这种情况是可能的。
这个故事是无稽之谈,就变量范围而言这两种形式都是等价的。以下是the standard说:
${parameter}
值,如果有的话,
parameter
将被取代。参数名称或符号可以用大括号括起来,除了位置参数不止一个数字,或者参数后面跟着一个可以解释为名称一部分的字符之外,大括号是可选的。匹配的大括号将通过计算大括号水平,跳过封闭的引用字符串和命令替换来确定。
如果参数名称或符号未包含在花括号中,则扩展名将使用最长的有效名称(请参见XBD规范术语表中的名称),不管该名称表示的符号是否存在。当shell扫描其输入以确定名称的边界时,它不会被已知定义的名称所限制。例如,如果
F
是定义的变量壳,命令:echo $Fred
不回送的
$F
接着red
值;它会选择最长可能的有效名称Fred
,在这种情况下可能会取消设置。
这应该是几乎微不足道的验证自己。没有? –
@MattBall我尝试了几个炮弹,无法复制,我也不会认为这只是一个笑话 – rook