Скрипт завершается при сохранении вывода grep -c, когда значение равно 0 - PullRequest
0 голосов
/ 20 февраля 2019

Я пытаюсь проверить, есть ли в файле перевод строки CR и сохранить результат 0 или 1. В переменную.

Вот моя команда, которая выполняется внутри скрипта.

isCR="$(file ${fileName} | grep -c 'with CR line terminators')"

Сценарий выполняется до предыдущей строки и не запускает эту строку, но резко завершается.

Внутри оператора echo он работает отлично.

echo "isCR=$(file ${fileName} | grep -c 'with CR line terminators')"

В зависимости от используемого файла печатается isCR = 0 или isCR = 1.

Но просто сохранение значения в переменной isCR не работает.Я запутался в том, что мне здесь не хватает.Любая помощь приветствуется.

1 Ответ

0 голосов
/ 20 февраля 2019

Использование 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 вернет" ложь "», при условии, что он выдал ненулевое число символов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...