В csh почему 4 - 3 + 1 == 0? - PullRequest
13 голосов
/ 18 июня 2009
#!/bin/csh

@ cows = 4 - 3 + 1
echo $cows

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

~root: csh simple.1
0

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

Редактировать: Значит, они правы, ассоциативны! Эти операторы НЕ ассоциативно правы в C, не так ли? Чем C-Shell отличается от C?

Ответы [ 3 ]

33 голосов
/ 18 июня 2009

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

   -
  / \
 /   \
4     +
     / \
    3   1
21 голосов
/ 18 июня 2009

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

3 голосов
/ 18 июня 2009

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

...