Парадокс логического И (&& )и ИЛИ (|| )в сценарии bash для проверки успешного выполнения команды (код выхода 0 интерпретируется как истина)

@nwildner спасибо за внимание, но мне удалось найти решение проблемы, описанной выше, на форуме CentOS, нужно было только перезагрузить машину! Перейди по ссылке.

https://www.centos.org/forums/viewtopic.php?f=47&t=69338&p=291404#p291404

5
04.02.2021, 20:41
1 ответ

Да, статус выхода команды инвертирует обычное сопоставление между целыми числами и понятиями «истина/ложь».

Причина этого в том, что команды могут завершаться ошибкой по-разному. Имеется только одно нулевое значение, но в этом случае много ненулевых -значений (255, поскольку используются только 8 бит состояния выхода ). Используя ненулевое значение, отличное от -, в качестве представления сбоя, вы можете использовать различные ненулевые значения, отличные от -, для кодирования различных типов сбоя.

Например, grepиспользует статус выхода 1, когда он успешно читает файлы, но не находит совпадений, и статус 2, когда он получает реальную ошибку.

Если ваше приложение не заботится о различиях между режимами сбоя, вы можете рассматривать их все как false, используя ifили логические операторы. Если вам не все равно, вы явно сравните $?.

Этот метод присвоения разных значений разным статусам выхода не очень распространен, но полезно иметь его под рукой, когда он вам нужен. Большинство программ просто используют 1в качестве кода ошибки, если им не нужно их различать.

true
echo $? # 0
false
echo $? # 1
4
18.03.2021, 22:32

Теги

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