Нет, 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 явно требуется для последнего примера.