Фигурные скобки
{} в Bash позволяют разворачивать выражения в последовательность аргументов.Простой пример:
echo {1..10}
# 1 2 3 4 5 6 7 8 9 10Можно в обратную сторону:
echo {10..1}
# 10 9 8 7 6 5 4 3 2 1⚙️ Шаг в диапазоне
Третий параметр задаёт шаг:
echo {1..501..100}
# 1 101 201 301 401 501Можно и в обратную сторону:
echo {501..1..100}
# 501 401 301 201 101 1⚙️ Последовательности букв
В отличие от
seq, фигурные скобки умеют работать с буквами:echo {A..P}
# A B C D E F G H I J K L M N O PШаг тоже поддерживается:
echo {A..P..2}
# A C E G I K M O⚙️ Перечисления и практические приёмы
Создать сразу несколько директорий:
mkdir ~/Sources/{test1,test2,test3}Сравнить оригинал и патч одной командой:
diff {orig,patched}/path/to/prog.cСделать бэкап файла:
cp -p file.txt{,.bak}
# создаст file.txt и file.txt.bak💡 Если перед запятой ничего нет, Bash просто подставляет существующее значение.
⚠️ Важно: пробелы внутри
{} ломают расширение!echo file{1.. 2}.txt # не сработает⚙️ Форматирование вывода
Можно убрать пробелы из вывода, передав вывод в
tr:echo {A..P..2} | tr -d " "
# ACEGIKMOСоздадим псевдоним для получения n-й буквы алфавита:
alias nth="echo {A..Z} | tr -d ' ' | cut -c"
nth 10
# J⚙️ {} vs []
Квадратные скобки
[] — это сопоставление с шаблоном имён файлов, а фигурные {} — просто генерация последовательности.ls file[1-9].txt
# отберёт существующие файлы
ls file{1..9}.txt
# попытается вывести все файлы последовательности, даже если их нет⚙️ Группировка и вложенность
Комбинация наборов:
touch {a,b,c}.{hpp,cpp}
# создаст a.cpp a.hpp b.cpp b.hpp c.cpp c.hppВложенные расширения:
mkdir -p {source,help{/pages,/yelp,/images}}Структура получится такая:
.
├── help
│ ├── images
│ ├── pages
│ └── yelp
└── source