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语句中的模式有一点不兼容。“
我不确定我是否喜欢这个理论基础,但是有人已经把它做得比较详细了,但是你有这个理由,或许这个晦涩难懂的案例陈述问题比我想象中的更具说服力?