Если я работаю diff -q
на двух файлах и они идентичны, код выхода, сгенерированный echo $?
0
; если файлы отличаются, код выхода 1
. Почему это? Каким образом является первым diff
успех и второе отказ?
Я использовал термины "успех" и "отказ" на основе моего чтения и ограничил понимание http://mywiki.wooledge.org/BashGuide/TestsAndConditionals:
- Статус выхода
Каждая команда приводит к коду выхода каждый раз, когда она завершается.
Этот код выхода используется любым приложением, запущенным это для оценки
пошло ли все хорошо. Этот код выхода похож на возвращаемое значение от
функции. Это - целое число между 0 и 255 (включительно). Конвенция
диктует, что мы используем 0 для обозначения успеха и любого другого числа для обозначения
какой-то отказ. Определенное число совершенно специализировано,
и используется для вывода подсказок относительно того, что точно пошло не так, как надо.
Я должен был читать man diff
до самого конца, где конвенция, используемая разработчиками, является четкой.
От man diff
:
Статус выхода 0, если исходные данные - то же, 1, если отличающийся, 2 если проблема.
я свободно признаю, что это не могло бы быть абсолютно стандартно , но коды выхода [еще 118], что Вы назвали бы «рекомендациями», чем фактические правила .
В этом случае, отклоняясь от стандарта позволяют Вам легко бежать diff
в сценариях.
diff a b && echo "no difference" || echo "differences!"
Это подобно grep
, который выйдет 0, что-то, найден, и 1, если что-то не найдено. Я не могу объяснить ориентацию между 0 и 1 для diff
. Я предполагаю, что они пошли с C-стандартом булевы результаты.
Это действительно не имеет значения. Это - просто произвольное число.
man diff
говорит нам
СТАТУС ВЫХОДА
The following exit values shall be returned:
0 No differences were found.
1 Differences were found.
>1 An error occurred.
, Ваш запрос выхода оценивает «успех», и «неудача» - самоограничивающий выбор. У программ есть целые 8 битов для статуса выхода, ценностей от 0 до 255.