Я понимаю, что если я выполняю команду в оболочке с операторами амперсанда, например, command1&&command2
и первая команда выполняется успешно, то она выполняется с нулевым статусом завершения.
Похоже ли это на булевую логику, где 0 — ложь, а 1 — истина, или я неправильно понял?
Имеет ли значение тип используемой оболочки? В настоящее время я использую Bourne-Again Shell.
решение1
Shell в основном равен 0, чтобы указать на отсутствие ошибок и успех, так что да, в этом смысле это логически верно, в отличие от многих языков программирования, где 0 обычно является ложью. Хотя в наши дни современные языки, как правило, имеют различные логические значения истины и лжи.
решение2
Лучшим объяснением будет то, что на самом деле существует только один «успех», но для «неудачи» существует несколько причин: файл не найден, ошибка аргумента, вычислительная ошибка и т. д. Это было соглашением ОС, а не только оболочки, в межпроцессном взаимодействии — код возврата, отправленный системным exit(2)
вызовом и полученный вызовом wait(2)
.