Почему 0 верно, но ложный 1 в оболочке?

false; echo $?

Вышеупомянутое произведет 1, который является противоречащим со всеми другими языками программирования, я знаю.

Какая-либо причина в этом?

105
задан Jens 21 September 2012 в 12:06
поделиться

5 ответов

Это просто соглашение, согласно которому код выхода 0 означает успех. EXIT_SUCCESS будет 0 почти во всех современных системах.

РЕДАКТИРОВАТЬ:

«Почему и тест 0, и тест 1 возвращают 0 (успех)?»

Это совершенно другой вопрос. Ответ заключается в том, что передача одного аргумента для проверки всегда приводит к успеху, если только этот аргумент не является пустой строкой (""). См. Документацию Open Group .

15
ответ дан 24 November 2019 в 03:58
поделиться

Это соглашение, но оно особенно полезно, если задуматься. В общем, если программа работает успешно, это все, что вам нужно знать. Однако, если это не удается, вам может потребоваться вся информация о сбое - почему это произошло, как его исправить и т. Д. Наличие нулевого среднего «успеха» и ненулевого среднего значения сбоя позволяет вам довольно легко проверить на успех. , и при желании изучите конкретную ошибку, чтобы получить дополнительные сведения. Многие API и фреймворки имеют схожее соглашение - успешно завершившиеся функции возвращают 0, а те, которые терпят неудачу, возвращают код ошибки, описывающий конкретный случай сбоя.

85
ответ дан 24 November 2019 в 03:58
поделиться

Обычно программы возвращают ноль в случае успеха и ненулевое значение в случае неудачи; false возвращает 1, потому что это удобное ненулевое значение, но обычно любое ненулевое значение означает какой-либо сбой, и многие программы будут возвращать разные ненулевые значения, чтобы указать разные режимы сбоя

12
ответ дан 24 November 2019 в 03:58
поделиться

AFAIK это исходит из соглашения C, что вы должны вернуть 0 в случае успеха. См .:

man close

Большая часть API C (POSIX) построена таким образом. http://en.wikipedia.org/wiki/C_POSIX_library

4
ответ дан 24 November 2019 в 03:58
поделиться

Bash - это язык программирования (сценариев), но он также является оболочкой и пользовательским интерфейсом. Если 0 было ошибкой, то программа могла представить только один вид ошибки.

Однако в Bash любое ненулевое значение является ошибкой, и мы можем использовать любое число от 1-255 для представления ошибки. Это означает, что у нас может быть много разных ошибок. 1 - общая ошибка, 126 означает, что файл не может быть выполнен, 127 означает «команда не найдена» и т. Д. Вот список Bash Коды выхода со специальными значениями , показывающие некоторые из наиболее распространенных кодов выхода.

Есть также много видов успеха (статус выхода 0 ). Однако успех позволит вам перейти к следующему шагу - вы можете напечатать результаты на экране, выполнить команду и т. Д.

67
ответ дан 24 November 2019 в 03:58
поделиться
Другие вопросы по тегам:

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