Как ключевое слово "если" проверяет, является ли значение истинным или ложным?
В скрипте bash
if [ 1 ]
then
echo "Yes"
else
echo "No"
fi
Выход: Yes
Это означает, что "1" рассматривается как истинное значение.
Но в коде:
word = Linux
letter = nuxi
if echo "$word" | grep -q "$letter"
then
echo "Yes"
else
echo "No"
fi
Выход: No
Но echo "$word" | grep -q "$letter"
echo "$word" | grep -q "$letter"
вернет 1, так почему результат - No
.
Как работает ключевое слово if
проверить значение, возвращаемое командой после if
?
Ответы
Ответ 1
Проверяется возвращаемое значение команды. [ 1 ]
имеет возвращаемое значение 0
(true). Любое другое возвращаемое значение (например, 1
) указывает на ошибку.
Вы можете отобразить возвращаемое значение последней выполненной команды с помощью переменной $?
:
true
echo $?
# returned 0
false
echo $?
# returned 1
echo $?
# returned 0 as the last executed command is 'echo', and not 'false'
Ответ 2
В unix land, 0 истинно, а 1 - false.
Для вашего первого примера:
if [ 1 ]
then
echo "Yes"
else
echo "No"
fi
"Если" проверяет код выхода данной команды на значение true/false (т.е. ноль/ненулевое значение).
Квадратные скобки на самом деле вызывают команду "тест" (см. "man test" для получения дополнительной информации) и укажите код выхода, если.
"test 1" (или действительно "test any_string" ) возвращает true (0), поэтому выводится "Да".
Для вашего второго примера это выводит "Нет", потому что "nuxi" не найден в "Linux", если вы измените "nuxi" на "nux" (возможно, это была опечатка?) и удалите пробелы вокруг = тогда вы получите ожидаемое поведение. например.
word=Linux
letter=nux
if echo "$word" | grep -q "$letter"
then
echo "Yes"
else
echo "No"
fi
Ответ 3
Это связано с тем, что grep не смог найти букву $в $word, поэтому код выхода равен 1. Всякий раз, когда процесс в linux возвращает код, отличный от 0, значит, это не сработало. 0 означает успешное завершение. Вы можете проверить это на echo "Linux" | grep -d "nuxi"; echo $?
С другой стороны, в мире сценариев 0 означает false и 1 означает true. Таким образом, grep не смог найти слово и отправить 1 как код выхода в if, который принял его как истинное значение.