У меня есть сценарий оболочки, который проверяет окончание строк Windows.Bash «set -e» и отрицательный код возврата
set -e
(! git ls-files | xargs grep -I $'\r')
Я использую "!" чтобы отрицать код возврата команды. Grep вернет код 0, когда будет найден файл с возвратом каретки, и «!» отрицает значение для кода возврата, то 1 и сценарий завершается. При использовании с grep (no xargs) это работает без круглых скобок. Когда используется xargs, отрицание происходит в соответствии с $ ?, как «echo $?» будет печатать «1», однако сценарий не выходит! После добавления круглых скобок вокруг всей команды она работает так, как ожидалось. Зачем нужны скобки?
«* При использовании с grep (no xargs) это работает без круглых скобок. *« Это немного неясно. Не могли бы вы показать код? – Leon
_ «скрипт не выходит» _ также неясно. –
['set -e' полно gotchas] (http://mywiki.wooledge.org/BashFAQ/105), до такой степени, что сообщество bash очень сильно расходятся в том, что это хорошая идея вообще. –