【发布时间】:2023-11-27 07:16:01
【问题描述】:
Fortran、Python、Ruby、Perl、Awk 等大多数语言都将求幂运算符的优先级定义为高于一元加号和减号的优先级。这会产生以下结果:
In [1]: -2**1
Out[1]: -2
In [2]: -2**2
Out[1]: -4
诸如 Ksh、bash、zsh 之类的 Shell 将这两个运算符的优先级颠倒。这导致了令人惊讶的结果:
$ echo $((-2**1))
-2
$ echo $((-2**2))
4
问题:为什么 shell 有这种特殊的优先顺序?我认为这是基于家谱的
ksh > bash > zsh。但还是..
注意:求幂不是 POSIX 的一部分
注意:其他语言/解释器存在类似的优先顺序,例如bc、tcl
相关问题:
【问题讨论】:
-
Awk 的 ^ 也比一元 -/+ 具有更高的优先级
-
@oguzismail 是的,我已将其添加到列表中。可能有更多的语言适合该图片,因为它符合书面数学中使用的优先级。那些贝壳似乎是奇怪的鸭子。
-
值得注意的是,书面数学中的一元减号与 Python 中的行为相同。 en.wikipedia.org/wiki/Order_of_operations#Unary_minus_sign
-
@oguzismail 你似乎删除了关于
bc的评论,我只是想读它:( -
@user1934428 同意。有什么地方可以推荐吗? Retrocomputing Software Engineering Unix & Linux ... ?
标签: bash language-lawyer zsh ksh operator-precedence