if [ false ]; then echo "HELP"; fi
Большинство думает, что
[ — это часть команды if как скобки в других языках программирования. Но нихуя!ㅤ
В Bash
if просто запускает команду. Команда [ ... ] — это обычный бинарник, аналогично команде test, а не специальный синтаксис. Скобка
] нужна только для красоты и завершения команды [.Команда выше напечатает
HELP, потому что строка "false" — непустая, а значит, условие считается истинным.Теперь о главном
Если хочешь использовать
grep в if, не надо писать скобки!Плохая практика:
if [ grep -q "foo" myfile ]; then
echo "Найдено!"
fi
[... ] — ожидает условие, а не командуgrep — это команда, а не логическое выражениеВнутри
[ запускать команды нельзя — это приведёт к ошибкеХорошая практика:
if grep -q "foo" myfile; then
echo "Найдено!"
fi
if просто запускает grepЕсли
grep нашёл совпадение, он вернёт 0 (успех), и выполнится thenИ Всё работает как надо, без лишних скобок!
[ — это как калькулятор, а grep — это поиск. В калькуляторе искать бесполезно!Выводы
Никогда не пиши
if [ grep ... ] — это ошибка!Пиши просто
if grep ..., чтобы проверить результат команды.if работает с командами. [ — это тоже команда, но не синтаксис.tags: #bash #badpractices #bestpractices
—
🔔 @bashdays➡️ @gitgate
