Как всем известно, простое утверждение if выглядит так:

если ТЕСТ-КОМАНДЫ; затем ПОСЛЕДОВАТЕЛЬНЫЕ КОМАНДЫ; фи

Тогда доктор говорит:

Выполняется список TEST-COMMAND, и если его состояние возврата равно нулю, выполняется список CONSEQUENT-COMMANDS.

Означает ли это, что возвращаемый статус TEST-COMMAND преобразуется в логическое значение true/false с использованием правила:

возврат статуса - 0 -> правда
возврат статуса - 1 -> ложь

а затем используется оператор if, чтобы определить, какое действие предпринять?

1 ответ1

1

Да. Например:

$ exitwith() { return $1; }
$ for stat in {0..10}; do
> if exitwith $stat; then
> echo "An exit status of $stat is considered true"
> else
> echo "An exit status of $stat is considered false"
> fi
> done
An exit status of 0 is considered true
An exit status of 1 is considered false
An exit status of 2 is considered false
An exit status of 3 is considered false
An exit status of 4 is considered false
An exit status of 5 is considered false
An exit status of 6 is considered false
An exit status of 7 is considered false
An exit status of 8 is considered false
An exit status of 9 is considered false
An exit status of 10 is considered false

Но на самом деле все немного сложнее, потому что состояние выхода - это 8-битное целое число без знака, оно может варьироваться от 0 до 255; значения за пределами этого диапазона уменьшаются по модулю 256 в этот диапазон:

$ for stat in -2 -1 255 256 257; do
> if exitwith $stat; then
> echo "An exit status of $stat (actually $?) is considered true"
> else
> echo "An exit status of $stat (actually $?) is considered false"
> fi
> done
An exit status of -2 (actually 254) is considered false
An exit status of -1 (actually 255) is considered false
An exit status of 255 (actually 255) is considered false
An exit status of 256 (actually 0) is considered true
An exit status of 257 (actually 1) is considered false

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .