Подводные камни в Bash №8
Вот те на!
Большинство думает, что [ — это часть команды if как скобки в других языках программирования. Но нихуя!
В Bash if просто запускает команду. Команда [ ... ] — это обычный бинарник, аналогично команде test, а не специальный синтаксис. 
Скобка ] нужна только для красоты и завершения команды [.
Команда выше напечатает HELP, потому что строка "false" — непустая, а значит, условие считается истинным.
Теперь о главном
Если хочешь использовать grep в if, не надо писать скобки!
Плохая практика:
[... ] — ожидает условие, а не команду
grep — это команда, а не логическое выражение
Внутри [ запускать команды нельзя — это приведёт к ошибке
Хорошая практика:
if просто запускает grep
Если grep нашёл совпадение, он вернёт 0 (успех), и выполнится then
И Всё работает как надо, без лишних скобок!
[ — это как калькулятор, а grep — это поиск. В калькуляторе искать бесполезно!
Выводы
Никогда не пиши if [ grep ... ] — это ошибка!
Пиши просто if grep ..., чтобы проверить результат команды.
if работает с командами. [ — это тоже команда, но не синтаксис.