разница между "bash -eu".и "баш -е" - PullRequest
0 голосов
/ 16 мая 2018

Извинения, если это репост. Я сделал поиск (не повезло), прежде чем опубликовать это.

"bash -e" будет ошибкой / неудачей, если будет какая-либо ошибка. Разве это не включает условие "bash -u"? Если параметр не задан, команда, использующая этот параметр, не сработает и будет перехвачена "bash -e"?

Разве "bash -eu" не равен "bash -e" в этом случае?

1 Ответ

0 голосов
/ 16 мая 2018

Нет, bash -e (bash, запущенный с установленным параметром оболочки errexit) не совпадает с bash -e -u (bash, запущенный как с установленными errexit, так и nounset).

Пример:

$ bash -e -c 'echo "hello $string"'
hello
$ echo "$?"
0
$ bash -e -u -c 'echo "hello $string"'
bash: string: unbound variable
$ echo "$?"
1

Использование неустановленной переменной в поле only errexit не является ошибкой, оно просто раскрывается в пустую строку.

Также:

$ bash -u -c 'echo "hello $string"'
bash: string: unbound variable
$ echo "$?"
127

Это показывает небольшую разницу между -e и -u.Только с -u, bash завершается с кодом 127, что приводит к ошибке «команда не найдена».С выходами -e и -u, bash с более общим кодом ошибки 1.


Это справедливо и для оболочки POSIX sh, хотя я неЯ полагаю, что статус выхода 127 явно требуется для последнего примера.

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