13
#!/bin/csh

@ cows = 4 - 3 + 1
echo $cows

当我期望“2”时,这个简单的 csh 脚本在运行时会产生“0”作为输出。

~root: csh simple.1
0

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

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

4

3 回答 3

33

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

   -
  / \
 /   \
4     +
     / \
    3   1
于 2009-06-17T23:51:34.567 回答
21

+ 和 - 运算符在 csh 中是右结合的。这意味着“4 - 3 + 1”被评估为“4 - (3 + 1)”。

于 2009-06-17T23:46:30.737 回答
3

运算符分组。它将运算读取为 4 - (3 + 1),而不是 (4 - 3) + 1。

于 2009-06-17T23:45:31.880 回答