bash:$ [<arithmetic-expression>]与$((<arithmetic-expression>))</arithmetic-expression> </arithmetic-expression>

时间:2010-03-10 09:25:47

标签: bash syntax operators legacy arithmetic-expressions

我刚刚偶然发现了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

那么$[...]使用$((...))执行了哪些测试,$[...]$((...))的旧版本?

2 个答案:

答案 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已经实施了“$(())”和 没有令人信服的理由发明另一种语法。 此外,“$ []”语法涉及的次要不兼容性 案例陈述中的模式。“

我不确定我是否喜欢这个理由“但是有人已经更加冗长地做了这件事,”但是你有它 - 也许案例陈述问题比我想象的更加引人注目?