bash中:$ [<算术表达式>]对$((<算术表达式>))
-
19-09-2019 - |
题
我刚在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 ))
...
只要可能,击用户应尽量使用具有方括号中的语法:
$[ EXPRESSION ]
然而,这只会计算表达式的结果,并没有做测试...
在我的bash的手册页,我只能找到$(( EXPRESSION ))
形式如:
foo=42
bar=$((foo+1)) # evaluates an arithmetic expression
那么,什么测试不与$[...]
与$((...))
做执行,或者是$[...]
只是$((...))
的旧版?
解决方案
对于bash v3.2.48的手册页表示:
[...]为算术扩展的格式是:
$((expression))
的旧格式$ [表达式]已被弃用并将在即将到来的版本除去 的是bash。
所以$[...]
是旧的语法不应再使用。
其他提示
@sth是完全正确的。而如果你是好奇为什么现在更详细的语法的青睐,从邮件列表看看这个旧的电子邮件。
http://lists.gnu.org/archive/html/bug -bash / 2012-04 / msg00033.html
“在早期的建议中,使用了形式$ [表达式]。这是功能 相当于“$(())”目前的文本,但反对意见 提出了1988年KornShell已实施“$(())”和 有没有令人信服的理由去创造另一个语法。 此外,“$ []”语法有涉及未成年人的不兼容 图案的情况下,声明“。
我不知道我喜欢的理由“但有人已经做到了这一点更冗长,”但你有它 - 也许是case语句的问题是更引人注目的,比我从这个不起眼的提想象?
不隶属于 StackOverflow