bash:$ 与$((<arithmetic-expression>))

我刚刚碰到了bash语法:

foo=42 bar=$[foo+1] # evaluates an arithmetic expression 

当我谷歌search这个,我发现http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_03_04.html#sect_03_04_05 :

3.4.6。 算术扩展

算术扩展允许评估算术expression式和replace结果。 算术扩展的格式是:

 $(( EXPRESSION )) 

只要有可能,Bash用户应该尝试使用带有方括号的语法:

 $[ EXPRESSION ] 

但是,这只会计算EXPRESSION的结果,不做任何testing…

在我的bash手册页中,我只能find$(( EXPRESSION ))forms,如:

 foo=42 bar=$((foo+1)) # evaluates an arithmetic expression 

那么什么样的testing不是用$[...] $((...))执行的$[...]执行的,还是$[...]只是$((...))的传统版本?

bash v3.2.48的手册页说:

[…]算术扩展的格式是:

  $((expression)) 

旧的格式$ [expression式]被弃用 ,并将在即将到来的版本的bash中被删除。

所以$[...]是旧的语法,不应该再使用了。

@sth是完全正确的。 如果您对为什么现在使用更详细的语法感到好奇,请查看邮件列表中的旧邮件。

http://lists.gnu.org/archive/html/bug-bash/2012-04/msg00033.html

“在早期的提案中,使用了一个expression式[expression式]。 它在function上等同于当前文本的“$(())”,但有人反对1988年的KornShell已经实现了“$(())”,并没有任何理由发明另一种语法。 此外,“$ []”语法与case语句中的模式有一点不兼容。“

我不确定我是否喜欢这个理论基础,但是有人已经把它做得比较详细了,但是你有这个理由,或许这个晦涩难懂的案例陈述问题比我想象中的更具说服力?