Попытка присвоения непеременной (маркер ошибки равен & ldquo; = 0 & rdquo;)

Просто подключите вывод через grep.

diff .... | grep -v CET

3
задан 15 May 2017 в 18:30

2 ответа

Арифметическая оценка внутри (( ... )), = - оператор присваивания, а не оператор логического сравнения. Таким образом, $(($w = 0)) является переменной разыменования w, а затем пытается присвоить значение 0 своему значению.

Возможно, что вы намеревались if $(($w == 0)). Однако, хотя и синтаксически корректно, синтаксис расширения параметра $w не нужен в этом контексте, поэтому вы можете упростить это до if ((w == 0)), а также для $(( $w != 0 )) и т. Д. Из раздела ARITHMETIC EVALUATION в man bash:

Shell variables are allowed as operands; parameter expansion is per‐ formed before the expression is evaluated. Within an expression, shell variables may also be referenced by name without using the parameter expansion syntax.

Также обратите внимание, что -le, -gt операторы предназначены для арифметического сравнения внутри [ ... ] или [[ ... ]] ] тестовые скобки; в скобках (( ... )) (которые предназначены только для арифметической оценки), вы должны использовать <=, > и т. д.

4
ответ дан 18 July 2018 в 13:20

Арифметическая оценка внутри (( ... )), = - оператор присваивания, а не оператор логического сравнения. Таким образом, $(($w = 0)) является переменной разыменования w, а затем пытается присвоить значение 0 своему значению.

Возможно, что вы намеревались if $(($w == 0)). Однако, хотя и синтаксически корректно, синтаксис расширения параметра $w не нужен в этом контексте, поэтому вы можете упростить это до if ((w == 0)), а также для $(( $w != 0 )) и т. Д. Из раздела ARITHMETIC EVALUATION в man bash:

Shell variables are allowed as operands; parameter expansion is per‐ formed before the expression is evaluated. Within an expression, shell variables may also be referenced by name without using the parameter expansion syntax.

Также обратите внимание, что -le, -gt операторы предназначены для арифметического сравнения внутри [ ... ] или [[ ... ]] ] тестовые скобки; в скобках (( ... )) (которые предназначены только для арифметической оценки), вы должны использовать <=, > и т. д.

4
ответ дан 24 July 2018 в 20:09
  • 1
    Я переключил линию 13 на $ [w == 0] (попробовал ее с $ до w, а также), и это приводит к этому сообщению- /home/rdmorgan0001/bin/dfchkr1.sh: строка 13: 0: команда не найдена / home / rdmorgan0001 / bin / dfchkr1.sh: строка 18: 1: команда не найдена /home/rdmorgan0001/bin/dfchkr1.sh: строка 24: -ge 100: ошибка синтаксиса в выражении (маркер ошибки равен 100) – morgro269 14 May 2017 в 15:20
  • 2
    Форма арифметической оценки $[ . . . ] устарела и не должна использоваться в новом коде - см., Например, stackoverflow.com/a/2415777/4440445 – steeldriver 14 May 2017 в 16:30

Другие вопросы по тегам:

Похожие вопросы: