Использование set -e
(он же set -o errexit
) указывает оболочке завершать работу всякий раз, когда какая-либо команда возвращает ненулевой статус выхода.
grep
возвращает ненулевой статус выхода, когда не находит совпадений.
Таким образом, при использовании bash -e
, set -e
, set -o errexit
, ловушки ERR
, которая вызывает выход, или подобной конфигурации, isCR="$(file ${fileName} | grep -c 'with CR line terminators')"
завершит ваш сценарий, поскольку ненулевой статус выхода из grep
команда передается в качестве состояния выхода команды в целом.
Напротив, echo "$(false)"
- нет, потому что ее состояние выхода соответствует echo
, а не false
;это верно, когда команда, возвращающая состояние неудачного завершения, также grep
.
Если вы хотите использовать set -e
, но в обход ее поведения для этой конкретной строки, рассмотрите:
isCR="$(file ${fileName} | grep -c 'with CR line terminators')" || [[ $isCR ]]
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * || [[ $isCR ]]
* * * * * * * * * * * * * * * * * * * * * *1027* * * * * * * * * * * * * * * * * '' '' '' '' '' '' '' '' '' 'будет "иметь" истинный »результат, если grep
вернет" ложь "», при условии, что он выдал ненулевое число символов.