Какова логика того, как bash проверяет истинность / ложь?

Вы создаете каталог с именем / swapfile и файл с именем swap , но в / etc / fstab вы ссылаетесь на / swapfile / swapfile вместо / файл подкачки / своп

2
08.04.2019, 05:07
1 ответ

Суть в том, что 0означает «истина», а1(или любое другое не-нулевое значение )означает «ложь».

В оболочке верный тест (или успешно завершенная программа ),завершается с кодом 0. Тест [[ -z "$VAR" ]]возвращает нулевой код (истина ), если $VARпуст, или один (ложь ), если он не пуст:

$ var=""; [[ -z "$var" ]]; echo $?
0
$ var="NOT EMPTY"; [[ -z "$var" ]]; echo $?
1

В итоге, если $VARне -пусто, то [[ -z "$VAR" ]]ложно, (возвращает1)и оператор thenне выполняется.

Предполагалось ли, что тест будет возвращать значение true, если переменная не была -пустой? Если да, замените -zна -n:

.
$ var=""; [[ -n "$var" ]]; echo $?
1
$ var="NOT EMPTY"; [[ -n "$var" ]]; echo $?
0

Для краткости тот же тест выполняется, если -nопущен:

$ var=""; [[ "$var" ]]; echo $?
1
$ var="NOT EMPTY"; [[ "$var" ]]; echo $?
0
7
27.01.2020, 21:52

Теги

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