Модификация переменных в Bash. Как использовать специальные механизмы подстановки?

модификация переменных в bash. как использовать специальные механизмы подстановки?

Способы изменения переменных

В прошлых уроках рассматривались стандартные механизмы подстановки. Они применяются для упрощения взаимодействия с терминалом Linux. Одним из таких механизмов является подстановка значений ранее определенных переменных с помощью конструкций $имя_переменной или ${имя_переменной}. Таким образом, переменные можно использовать в математических операциях или в качестве параметров команд. Например, переменная users_data хранит путь к директории пользовательских файлов. Посмотреть весь их список можно с помощью команды «ls -l ${users_data}».

Реальные Bash-скрипты гораздо сложнее, чем примеры, приводимые в этом учебном курсе. Зачастую системному администратору требуется включить в код сценария дополнительные проверки значений переменных и модифицировать их в зависимости от ситуации. Есть несколько способов реализации подобных задач, но лучше всего использовать дополнительные механизмы подстановки, предназначенные специально для работы со значениями переменных.

Ниже приводятся примеры использования нескольких механизмов подстановки. Они демонстрируют модификацию текстовых значений, применение значений по умолчанию и работу с ошибками. Весь список конструкций, доступных в сценариях Bash, представлен далее в уроке.

#замена подстроки в тексте
cost='общая стоимость покупки -count-'
echo ${cost/-count-/450руб.}
общая стоимость покупки 450руб.

#применение значений по умолчанию
firstname='Андрей'
echo ${firstname:-Имя отсутствует}
Андрей
echo ${surname:-Фамилия отсутствует}
Фамилия отсутствует

#ошибка при пустом значении
echo ${important_var:?отсутствует значение}
bash: important_var: отсутствует значение

important_var='важные данные'
echo ${important_var:?отсутствует значение}
важные данные

Список механизмов подстановки
 

Конструкция Описание
Основная работа со строками
${имя_переменной^} Первый символ строки переводится в верхний регистр.
${имя_переменной^^} Все символы строки переводятся в верхний регистр.
${имя_переменной,} Первый символ строки переводится в нижний регистр.
${имя_переменной,,} Все символы строки переводятся в нижний регистр.
${имя_переменной~} Изменяет регистр первого символа на противоположный.
${имя_переменной~~} Изменяет регистр всех символов на противоположный.
${#имя_переменной} Вернет количество символов содержащихся в переменной.
Удаление подстроки в строке
${имя_переменной#паттерн} Возвращает строку, из начала которой убрана подстрока минимально соответствующая заданному паттерну. Например, паттерн «*-» для строки «my-test-string» вернет значение «test-string».
${имя_переменной##паттерн} Механизм подстановки аналогичен предыдущему, но ищется максимальное совпадение с паттерном. В примере будет возвращено значение «test».
${имя_переменной%паттерн} Возвращает строку, из конца которой убрана подстрока минимально соответствующая заданному паттерну. Например, паттерн «-*» для строки «my-test-string» вернет значение «my-test».
${имя_переменной%%паттерн} Механизм подстановки аналогичен предыдущему, но ищется максимальное совпадение с паттерном. В примере будет возвращено значение «-».
Замена подстроки в строке
${имя_переменной/паттерн/строка-замены} Заменяется первое совпадение с паттерном. Например, паттерн «/user/adminisrator» для строки «Hello user!» вернет строку «Hello administrator!».

${имя_переменной//паттерн/строка-замены}

Заменяются все совпадения с паттерном
${имя_переменной/паттерн} Удаляет из строки первое совпадение с паттерном.
${имя_переменной//паттерн} Удаляет из строки все совпадения с паттерном.
Работа со значениями переменных
${!поисковой_текст*}
${!поисковой_текст@}
Показывают имена всех переменных, начинающихся с указанного текста. Например, команда «echo ${!BASH*}» покажет имена переменных «BASH BASHOPTS BASHPID ...».
${имя_переменной:-значение} Если переменная не пуста будет возвращено её значение, в противном случае берется значение указанное после «:-». Сама переменная не изменяется.
${имя_переменной:=значение} Аналогично предыдущему механизму подстановки, но если переменная была пуста, указанное значение будет записано в неё.
${имя_переменной:+значение} Если переменная была пуста, то она таковой и останется. В противном случае она перезаписывается новым значением.
${имя_переменной:?сообщение} Подставляет значение переменной, если она не пуста. В противном случае завершает скрипт с ошибкой, текстом которой является указанное сообщение.
${!имя_переменной} Возвращает значение, содержащееся в переменной, имя которой указано после знака «!».

Заметка
В Bash некоторые механизмы подстановки переменных используют так называемые паттерны. Они могут содержать любые символы, буквы, прямые вхождения слов, а также ряд других подстановочных конструкций (*, ? и […]) с которыми вы можете ознакомиться, перейдя по ссылке, указанной в начале урока.

Последние публикации