В csh, почему 4 - 3 + 1 == 0?

#!/bin/csh

@ cows = 4 - 3 + 1
echo $cows

Этот простой csh script при запуске создает "0" для вывода, когда я ожидаю "2".

~root: csh simple.1
0

Я сделал кучу взглядов, и единственное, что я мог подумать, было то, что "-" читалось как унарное отрицание, а не вычитание, поэтому меняя приоритет оператора и заканчивая 4-4, а не 2 + 1. Это верно? Если да, то почему? Если нет... помогите!

Изменить: значит, они правы ассоциативные! Эти операторы НЕ являются ассоциативными в C, не так ли? Является ли C-Shell отличным от C?

Ответ 1

Пока вы ожидаете, что операторы останутся ассоциативными, они правая ассоциативность в csh, поэтому он оценивается как 4-(3+1)

   -
  / \
 /   \
4     +
     / \
    3   1

Ответ 2

Операторы + и - являются право-ассоциативными в csh. Это означает, что "4 - 3 + 1" оценивается как "4 - (3 + 1)".

Ответ 3

Группировка операторов. Он считывает операцию как 4 - (3 + 1), в отличие от (4 - 3) + 1.