TGViewer
LinuxCamp | DevOps LinuxCamp | DevOps @linuxcamp_tg · 13.6K subscribers
Post #667 5.48K
Bash parameter expansion: шпаргалка, которая реально нужна

Значение по умолчанию и проверка на пустоту

Это полезно, когда переменная может быть не задана или пустая. Вместо if часто хватает одной конструкции.


echo "${NAME:-guest}" # если NAME пустая или не задана → guest
echo "${NAME:=guest}" # то же самое, но еще и присвоит NAME=guest
echo "${NAME:?NAME required}" # если пустая/не задана → ошибка
echo "${NAME:+set}" # если NAME задана и не пустая → set


Короткая логика такая:


:- взять запасное значение
:= присвоить запасное значение
:? упасть с ошибкой
:+ вернуть другое значение, если переменная есть


Обрезка, замена и работа со строкой

Через expansion можно убрать префикс, суффикс или заменить кусок строки без sed и cut. Для shell-скриптов это очень удобно.


FILE="/opt/app/logs/error.log"

echo "${FILE#*/}" # opt/app/logs/error.log
echo "${FILE##*/}" # error.log
echo "${FILE%/*}" # /opt/app/logs
echo "${FILE%%/*}" # пусто, т.к. уберет все после первого /
echo "${FILE/logs/tmp}" # /opt/app/tmp/error.log
echo "${FILE//o/O}" # /Opt/app/lOgs/errOr.lOg


Запомнить можно так:


# и % = убрать кусок
## и %% = убрать по максимуму
/old/new = заменить первое совпадение
//old/new = заменить все


Длина, подстрока и индексы

Когда нужно быстро достать часть строки или длину, Bash уже умеет это сам.


STR="community-back-dev"

echo "${#STR}" # длина строки
echo "${STR:0:9}" # community
echo "${STR:10}" # back-dev


Для массивов тоже работает:


ARR=(api worker nginx)

echo "${ARR[0]}" # api
echo "${ARR[@]}" # все элементы
echo "${#ARR[@]}" # количество элементов


Вывод

Если в bash-скрипте у тебя появились cut, awk и sed ради одной мелочи, сначала проверь, нельзя ли решить это через parameter expansion. Часто это короче, быстрее и читается лучше.

LinuxCamp | #utils
  • 👍 36
  • 🔥 9
  • ❤ 8
More from @linuxcamp_tg
  1. Sep 28, 2026Проекту GNU вчера исполнилось 43 года 1983 год: Ричард Столлман объявил планы разработать…
  2. Sep 25, 2026Linux будет работать на ноутах с Snapdragon X2. Qualcomm добавляет полноценную поддержку L…
  3. Sep 24, 2026Так все по делу)) Советует же самый быстрый фикс LinuxCamp | #memes
  4. Sep 23, 2026Планы на 3 октября — прийти на RWB Infra x Security Meetup Мы направим прожекторы на инфра…
  5. Sep 22, 2026Ещё одна рекордная неделя для AI-разработки в Linux. На прошлой неделе в ядро попало 1 634…
  6. Sep 17, 2026Открыл плейлист, а как выйти - непонятно 😁 LinuxCamp | #memes
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →