Подтвердить что ты не робот

Проверьте, является ли условие ложным

Кажется, это простой вопрос, интересно, почему googling ничего не помог - ни в StackOverflow, ни в учебниках. Мне просто нужно проверить с помощью bash, что условие ложно.

Из того, что я нашел, я попробовал

if ! [ 0==2 ]; then echo Hello; fi

и

if [ ! 0==2 ]; then echo Hello; fi 

ни один из них не печатает Hello.

Я нашел только два похожих вопроса, но окончательный ответ в обоих случаях был измененным кодом, чтобы не использовать условие "ложь".

4b9b3361

Ответ 1

Вы имеете в виду:

if ! [ 0 == 2 ]; then
  echo Hello;
fi

Вам не хватало пространства вокруг оператора равенства.

Это может быть время, чтобы прочитать http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html - особенно разделы о том, если then else и операторы. Обычно я открываю это, когда пишу скрипты.

Ответ 3

Если вы используете команду test ([..]), вы можете использовать опцию сравнения для integer: -eq, equal и -ne, не равно.

if [ 0 -eq 2 ]; then echo true ; else echo false ; fi # false
if [ 0 -eq 0 ]; then echo true ; else echo false ; fi # true

if [ 0 -ne 2 ]; then echo true ; else echo false ; fi # true
if [ 0 -ne 0 ]; then echo true ; else echo false ; fi # false

В bash оператор [...] является эквивалентом test, команды, которая проверяет типы файлов и сравнивает значения; test - это внутренняя команда: если вы спросите свою оболочку с помощью type [, она ответит [ is a built in shell command. Вы можете найти двоичный файл тоже обычно в /usr/bin/[.

СИНТАКСИС test EXPRESSION, как вы можете читать из man test или из info coreutils test invocation.

Упущенное EXPRESSION по умолчанию имеет значение false. В противном случае EXPRESSION является истинным или ложным и устанавливает статус выхода.

Это отрывок от человека, который помогает понять немного лучше

  • (ЭКСПРЕССИЯ) ЭКСПРЕССИЯ истинна. Поэтому легко принять во внимание ошибку как операцию 0==1. (Операция 0 == 1 с пробелами, 0==1 является выражением).

  • ! EXPRESSION EXPRESSION является ложным.

  • ...
  • INTEGER1 -eq INTEGER2 INTEGER1 равен INTEGER2
  • INTEGER1 -ne INTEGER2 INTEGER1 не равен INTEGER2

Из info coreutils test invocation вы можете прочитать о состоянии выхода теста.

Статус выхода:

 0 if the expression is true,
 1 if the expression is false,
 2 if an error occurred.

Ответ 4

В дополнение к математическим оценкам bash вы можете использовать логические выражения вместо if:

[[email protected]:~] $ (( 0 == 0 )) && echo True || echo False
True
[[email protected]:~] $ (( 0 != 0 )) && echo True || echo False
False