在csh中,为什么4 - 3 + 1 == 0?

Ins*_*oup 13 csh operators

#!/bin/csh

@ cows = 4 - 3 + 1
echo $cows
Run Code Online (Sandbox Code Playgroud)

运行时这个简单的csh脚本在我期望"2"时产生输出"0".

~root: csh simple.1
0
Run Code Online (Sandbox Code Playgroud)

我做了一堆看,我唯一能想到的是" - "被读作一元否定而不是减法,因此改变运算符优先级并以4 - 4而不是2 + 1结束.这是正确?如果是这样,有什么理由吗?如果不是......帮助!

编辑:所以他们是正确的联想!这些运算符在C中不是正确的关联,是吗?C-Shell与C有什么不同?

Pau*_*xon 33

虽然您期望运算符是左关联的,但它们在csh中正确关联的,因此它被评估为4-(3+1)

   -
  / \
 /   \
4     +
     / \
    3   1
Run Code Online (Sandbox Code Playgroud)


Bra*_*lor 21

+和 - 运算符在csh中是右关联的.这意味着'4 - 3 + 1'被评估为'4 - (3 + 1)'.