我刚刚偶然发现了bash语法:
foo=42
bar=$[foo+1] # evaluates an arithmetic expression
当我用Google搜索时,我找到了http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_03_04.html#sect_03_04_05:
3.4.6。算术扩展
算术扩展允许评估算术表达式和结果的替换。算术扩展的格式为:
$(( EXPRESSION ))
...
只要有可能,Bash用户应该尝试使用带方括号的语法:
$[ EXPRESSION ]
但是,这只会计算EXPRESSION的结果,并且不进行测试......
在我的bash手册页中,我只能找到$(( EXPRESSION ))
表单,例如:
foo=42
bar=$((foo+1)) # evaluates an arithmetic expression
那么$[...]
使用$((...))
执行了哪些测试,$[...]
仅$((...))
的旧版本?
答案 0 :(得分:31)
bash v3.2.48的联机帮助页说:
[...]算术扩展的格式为:
$((expression))
旧格式$ [表达式]已弃用,将在即将发布的版本中删除 bash。
所以$[...]
是不再使用的旧语法。
答案 1 :(得分:12)
@sth是完全正确的。如果您对为什么现在支持更详细的语法感到好奇,请查看邮件列表中的旧电子邮件。
http://lists.gnu.org/archive/html/bug-bash/2012-04/msg00033.html
“在早期提案中,使用了表单$ [表达式]。这是功能上的 相当于当前文本的“$(())”,但反对意见是 提出1988年KornShell已经实施了“$(())”和 没有令人信服的理由发明另一种语法。 此外,“$ []”语法涉及的次要不兼容性 案例陈述中的模式。“
我不确定我是否喜欢这个理由“但是有人已经更加冗长地做了这件事,”但是你有它 - 也许案例陈述问题比我想象的更加引人注目?