Одиночные скобки
[ ] — это не синтаксис bash, а внешняя команда /usr/bin/[. Двойные [[ ]] — встроенная конструкция самого bash. Разница не только косметическая.Где одиночные скобки ломаются
Пустая переменная без кавычек это синтаксическая ошибка:
name=""
# [ ] — падает с "unary operator expected"
if [ $name = "admin" ]; then
# [[ ]] — работает корректно
if [[ $name == "admin" ]]; then
Строка с пробелами без кавычек:
file="my file.txt"
# [ ] — видит два аргумента, ломается
if [ -f $file ]; then
# [[ ]] — обрабатывает как одно значение
if [[ -f $file ]]; then
Что умеют только
[[ ]]Паттерн-матчинг без внешних утилит:
filename="access.log"
if [[ "$filename" == *.log ]]; then
echo "log file"
fi
Регулярные выражения через
=~:version="2.4.1"
if [[ "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "valid semver"
fi
Логические операторы
&& и || внутри скобок:# [ ] — нельзя, нужно выносить наружу
if [ "$a" = "x" ] && [ "$b" = "y" ]; then
# [[ ]] — можно внутри
if [[ "$a" == "x" && "$b" == "y" ]]; then
Одно исключение
[ ] нужен для POSIX-совместимых скриптов с #!/bin/sh — там [[ ]] не работает. Если шебанг #!/bin/bash — используйте [[ ]] везде.📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека devops'a
#root_prompt