false; echo $?
Вышеупомянутое произведет 1
, который является противоречащим со всеми другими языками программирования, я знаю.
Какая-либо причина в этом?
Это просто соглашение, согласно которому код выхода 0 означает успех. EXIT_SUCCESS будет 0 почти во всех современных системах.
РЕДАКТИРОВАТЬ:
«Почему и тест 0, и тест 1 возвращают 0 (успех)?»
Это совершенно другой вопрос. Ответ заключается в том, что передача одного аргумента для проверки всегда приводит к успеху, если только этот аргумент не является пустой строкой (""). См. Документацию Open Group .
Это соглашение, но оно особенно полезно, если задуматься. В общем, если программа работает успешно, это все, что вам нужно знать. Однако, если это не удается, вам может потребоваться вся информация о сбое - почему это произошло, как его исправить и т. Д. Наличие нулевого среднего «успеха» и ненулевого среднего значения сбоя позволяет вам довольно легко проверить на успех. , и при желании изучите конкретную ошибку, чтобы получить дополнительные сведения. Многие API и фреймворки имеют схожее соглашение - успешно завершившиеся функции возвращают 0, а те, которые терпят неудачу, возвращают код ошибки, описывающий конкретный случай сбоя.
Обычно программы возвращают ноль в случае успеха и ненулевое значение в случае неудачи; false
возвращает 1, потому что это удобное ненулевое значение, но обычно любое ненулевое значение означает какой-либо сбой, и многие программы будут возвращать разные ненулевые значения, чтобы указать разные режимы сбоя
AFAIK это исходит из соглашения C, что вы должны вернуть 0 в случае успеха. См .:
man close
Большая часть API C (POSIX) построена таким образом. http://en.wikipedia.org/wiki/C_POSIX_library
Bash - это язык программирования (сценариев), но он также является оболочкой и пользовательским интерфейсом. Если 0
было ошибкой, то программа могла представить только один вид ошибки.
Однако в Bash любое ненулевое значение является ошибкой, и мы можем использовать любое число от 1-255 для представления ошибки. Это означает, что у нас может быть много разных ошибок. 1
- общая ошибка, 126
означает, что файл не может быть выполнен, 127
означает «команда не найдена» и т. Д. Вот список Bash Коды выхода со специальными значениями , показывающие некоторые из наиболее распространенных кодов выхода.
Есть также много видов успеха (статус выхода 0
). Однако успех позволит вам перейти к следующему шагу - вы можете напечатать результаты на экране, выполнить команду и т. Д.