Рекомендую другим рядком поставити "set -ue -o pipefail", який ввімкне неофіційний строгий режим для bash.
Це означатиме, що якщо будь-яка змінна не матиме значення, коли її підставлятимуть, завершить роботу скрипта з помилкою, що дозволить не боятися помилок в іменах змінних. Але тоді доведеться всім змінним присвоїти початкове значення, або підставляти змінні як
"${FOO:-default value}"
Також, будь-яка команда, яка поверне ненульовий код завершення, припинить виконання скрипта без виводу повідомлення про помилку. Це дозволить не боятися, що скрипт продовжить виконання з неправильними даними після помилки. Але тоді до кожної команди, яка може потенційно зазбоїти, потрібно буде додавати обробник помилок, напр.
foo --bar || { echo "ERROR: can't do foo --bar" >&2; exit 1; }
або
error() {
echo "ERROR: $*"
exit 1
}
foo --bar || error "Can't do foo --bar"
Я написав цілу систему скриптів
https://github.com/vlisivka/bash-modules для роботи в такому стилі.