set -euo pipefail: где он не спасает
Строгий режим ловит многое, но у него есть известные ловушки.
set -euo pipefail в начале скрипта — хорошая привычка. Но у строгого режима есть места, где он ведёт себя неожиданно.
local прячет ошибку
f() { local v=$(false); echo "дошли"; }
Код возврата здесь — от local, а не от подстановки, поэтому скрипт не остановится. Лечится объявлением и присваиванием отдельными строками.
grep без совпадений — это ошибка
grep возвращает 1, если ничего не нашёл, и с -e скрипт завершится. Если отсутствие совпадений нормально, нужен || true.
Арифметика с нулём
i=0; ((i++)) # выражение равно 0 → код 1 → выход
Безопаснее писать i=$((i + 1)).
Строгий режим не заменяет проверок, но делает молчаливые сбои громкими, а это главное.