Фигурные скобки {} в Bash: развертывание и группировка
Фигурные скобки используются в Bash для группировки, подстановки и развертывания аргументов.
🔹1. Разворачивание (Brace Expansion)
Фигурные скобки позволяют создавать списки значений или диапазоны.
1.1. Перечисление значений
echo {a,b,c}
Вывод: a b c
mkdir {backup,logs,temp}
Создаст три папки: backup/ logs/ temp/
1.2. Числовые диапазоны
echo {1..5}
Вывод: 1 2 3 4 5
echo {01..05}
Вывод: 01 02 03 04 05
1.3. Диапазон букв
echo {a..e}
Вывод: a b c d e
echo {A..Z}
Вывод: A B C ... X Y Z
1.4. Шаг в диапазоне
echo {1..10..2}
Вывод: 1 3 5 7 9
echo {a..z..2}
Вывод: a c e g ... y
🔹2. Группировка команд
Фигурные скобки {} группируют команды, выполняя их в текущем shell-процессе.
{ echo "Привет"; echo "Мир"; }
Вывод:
Привет
Мир
ВАЖНО: После { и перед } нужен пробел, иначе будет ошибка!
{ echo "Тест"; ls; } > output.txt
Перенаправит вывод обеих команд в файл output.txt.
🔹3. Использование в find и xargs
Фигурные скобки {} используются как placeholder для аргументов в find -exec и xargs.
3.1. find -exec
find /var/log -name "*.log" -exec rm {} \;
Удаляет все `.log` файлы в `/var/log`. {} заменяется найденными файлами.
find /home -type f -name "*.txt" -exec mv {} /backup/ \;
Перемещает все .txt файлы в /backup/.
3.2. xargs
ls *.log | xargs rm -f
Удаляет все .log файлы в текущей директории.
find /var/log -name "*.log" | xargs -I {} mv {} /backup/
Перемещает .log файлы в /backup/. -I {} подставляет аргумент в команду.
🔹4. Слияние строк (Brace Expansion & Globbing)
echo file{1,2,3}.txt
Вывод: file1.txt file2.txt file3.txt
touch report_{jan,feb,mar}.csv
Создаст файлы: report_jan.csv report_feb.csv report_mar.csv
mv logs/{old,new}/backup/
Переместит logs/old и logs/new в backup/.
🔹5. Ограничения и нюансы
1. Не работает в кавычках – {} не развернутся внутри "" или ''.
2. Не поддерживает переменные – Bash не развернет {1..$N}, нужна seq.
echo {1..$N} # Не сработает
echo $(seq 1 $N) # Альтернатива
3. Работает только в Bash – другие оболочки (sh, zsh) могут работать иначе.
👉 @i_odmin