Здесь мой Bash script:
#!/bin/bash -e
if [ == "" ]; then
echo "BAD"
exit 1
fi
echo "OK"
И вот вывод:
./test.sh: line 3: [: ==: unary operator expected
OK
Код возврата равен 0.
В строке 3 очевидна синтаксическая ошибка. Вместо того, чтобы поднять синтаксическую ошибку и отказаться от запуска script, как-то script просто запускается и сообщает о синтаксической ошибке во время выполнения. Флаг -e
не защитил меня от этого - очевидно, синтаксическая ошибка в выражении if
представляет собой ложное условие, а не причину немедленно выйти из программы. НО, каким-то образом Bash проанализировал весь блок if ... fi
, поэтому после игнорирования плохой строки выполнение каким-то образом возобновляется не на следующей синтаксически правильной строке, а после окончания блока?
У меня есть два вопроса:
- Что происходит?
- Как я могу защитить себя от этого поведения в будущем?