Подводные камни в Bash №3
Когда в Bash ты сравниваешь две переменные, важно не проебаться с кавычками.
В этом примере если переменная $foo
будет пустой, то по итогу ты попадешь в просак:
Логично вылезет ошибка, потому что «=» ожидает два значения. Чтобы избежать этой ситуации, на помощь приходят — кавычки.
Теперь всё в поряде. Ошибки никакой нет.
Но Bash не пальцем деланный, поэтом сравнить две переменные можно иначе.
Теперь кавычки нахуй не нужны. Но опять же если в переменной будут спецсимволы, то тебя ожидают грабли.
Есть еще легаси способ:
В современном мире ты вряд ли с ним столкнешься, но в каких-то допотопных скриптах вполне можешь найти.
Если $foo
пустая, то без x
получится:
А с x
будет:
В [[ ... ]]
переменные не разделяются на слова, даже если содержат пробелы.
А если сделать так:
Получишь ошибку: bash: [: too many arguments
Все это справедливо для Bash. Если пишешь под sh, то твой путь это одинарные скобки [...]
.
А еще в двойных скобках можно использовать шаблоны:
Вернёт true
, потому что foo
начинается с «h».
Либо написать сложное условие:
В одинарных кавычках это выглядело бы так:
Выводы:
Всё что тебе нужно знать это первые два способа:
Это трувей, бестпрактика и мастхев.
Изучай.