Почему оператор if выполняется в `if ['' = 1]; тогда эхо "правда"; еще эхо "ложь"; fi`? - PullRequest
0 голосов
/ 14 февраля 2020
if test-commands; then
  consequent-commands;
[elif more-test-commands; then
  more-consequents;]
[else alternate-consequents;]
fi

Список тестовых команд выполняется, и если его статус возврата равен нулю, выполняется список последовательных команд.

Показать состояние ''=1 в bash.

''=1
bash: =1: command not found
echo $?
127

Значение состояния - 127, а не ноль. Странное утверждение:

if [ ''=1 ] ; then echo "true"; else echo "false"; fi
true

Почему значение состояния 127, а не ноль, вызывает оператор? Почему нельзя получить false в bash?

@ Дмитрий Шатов

=1
bash: =1: command not found
echo $?
127

Ответы [ 2 ]

3 голосов
/ 14 февраля 2020

Вам нужны пробелы

''=1 интерпретируется как строка =1, а test находит непустую строку. Если вы хотите сравнить '' с 1, напишите

[ '' = 1 ]

Почему статус 127?

man bash

... Если это функция не определена, оболочка печатает сообщение об ошибке и возвращает состояние выхода 127.

1 голос
/ 14 февраля 2020

Это потому, что это операция сравнения строк.

if [ "$a" = "$b" ]
then
    echo 'true'
else
    echo 'false'
fi

Вам нужно использовать != вместо = при сравнении двух строк. Это будет действовать как противоположность сравнения [ "$a" = "$b" ]

if [ "$a" != "$b" ] 
then
    echo 'false'
else
    echo 'true'
fi
...