Расширения параметров в bash

Символ ‘$‘ обозначает расширения параметров, замену команды или арифметических выражений. Имя параметра или символ который будет расширен, может быть взят в фигурные скобки, которые не являются обязательными, они служат для того чтобы защитить его от расширения с символами которые идут непосредственно за ним и могут быть интерпритированы как часть имени.

Когда используются фигурные скобки, завершающей считается первая скобка ‘}‘, которая не замаскирована обратной косой чертой и не находится в строке в кавычках, и не находится в пределах встроенных арифметических выражений, замены команд или параметров расширений.

${параметр}

Значение параметра заменяется. Фигурные скобки необходимы когда параметр является позиционным, а номер позиции состоит более чем из одной цифры или когда за параметром следует символ который не является частью его имени.

Если первым символом параметра является восклицательный знак (!), начинается косвенная подстановка. Bash использует значение переменной которая формируется из остальных параметров, таких как имя переменной: затем эта переменная расширяется и это значение используется в остальной части замены, а не само значение параметра. Это называется косвенное расширение. Исключением из этого правила, являются расширения ${!префикс*} и ${!имя[@]}. Восклицательный знак должен следовать непосредственно за левой фигурной скобкой для введения косвенной подстановки.

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

При невыполнении подстрок расширения, использующих формы записанные ниже. Bash проверяет установлены ли параметры и не являются ли они пустыми. Пропуск двоеточия проверит только установлен ли параметр.

${параметр:-слово}

Использует значение по умолчанию. Если параметр не установлен или нулевой, подставляется значение слова которое указано. Иначе подставляется параметр.

${параметр:=слово}

Присваивает значение по умолчанию. Если параметр не установлен или нулевой, параметру присваивается значение указанного слова. Затем подставляется значение параметра. Позиционные параметры и специальные параметры, таким образом не могут быть присвоены.

${параметр:?слово}

Выводит ошибку если равно нулю или не установлено. Если параметр равен нулю или неустановлен, слово расширяясь записывается на стандартный вывод ошибок shell, если shell не интерактивна то оболочка завершает работу. В ином же случае значение параметра заменяется.

${параметр:+слово}

Используется альтернативное значение. Если параметр нулевой или же неустановлен, ничего не заменяется, в ином же случае заменяется на указанное слово.

${параметр:смещение}

${параметр:смещение:длина}

Расширение подстроки. Подставляются символы значения параметра, начиная с указанного смещения и оканчивая указанным значением длины. Если длина не указана, расширение параметра подстроки начинается с символа указанного смещения. В качестве длины и смещения можно задать арифметическое выражение. Если же смещение оценивается как число ниже нуля, то значение используется как смещение из конца значения параметра. Арифметические выражения начиная с «» должны быть отделены пробелом от предыдущих: необходимо отличать от расширений используемых значения по умолчанию. Если длина вычисляется как число меньше нуля, и параметр не является «@», а так же не является индексированным и ассоциативным массивом, то он интерпритируется как смещение с конца значения параметра, вместо числа символов и расширений символов между двумя смещениями. Если параметр «@», в результате длина позиционных параметров начинается со смещения. Если параметр является индексированным массивом, с именем индекса «@» или «*» то результатом является длина элементов массива начиная с ${параметр[смещение]}. Отрицательное смещение, берется относительно максимального индекса указанного массива, на единицу больше. Подстрока расширения применяемая к ассоциативному массиву, приводит к неопределенным результатам. Следует отметить что отрицательное смещение должно быть определено двоеточием, по крайней мере в одном месте, для того чтобы избежать путаницы с расширением «:-». Подстрока индексации начинается с нуля, если позиционные параметры не используются, в этом случае индексация начинается с 1 по умолчанию. Если смещение равно нулю и используются позиционные параметры, $0 префикса списка.

${!префикс*}

${!префикс@}

Имена сообветствующих префиксов. Расширяются в имена переменных, имена которых начинаются с префикса, разделенные первым символом специальной переменной IFS. Когда используется «@» и расширение появляется в двойных кавычках, имя каждой переменной расширяется в отдельное слово.

${!имя[@]}

${!имя[*]}

Список ключей массива. Если имя переменной массива, расширение происходит в список массива индексов(Ключей) назначенных по имени. Если имя не является массивом, расширение происходит до 0, если имя задано и равно нулю в ином случае. Когда используется «@» и расширение появляется в двойных кавычках, каждый ключ расширяется в отдельное слово.

${#параметр}

Длина параметра. Длина символов, значение параметра заманяется. Если параметр «*» или «@» значение заменяется количеством позиционных параметров. Если параметр явялется именем индексного массива «*» или «@» значение заменяется количеством элементов в массиве.

${параметр#слово}

${параметр##слово}

Удаляется шаблон соответствующий префиксу. Слово расширяется для получения шаблона так же, как расширение имен файлов. Если шаблон соответствует начальному значению параметра, то результатом является расширение значения параметра с коротким соответствующим шаблоном »#» или же в длинным соответствующим шаблоном »##» удаляется. Если параметр «@» или «*» операция удаления шаблона применяется к каждому позиционному параметру и подставляется в полученный в результате список. Если параметр представляет собой индексный массив с «@» или «*» операция удаления шаблона применяется к каждому элементу массива по очереди, и подставляется в полученный в результате список.

${параметр%слово}

${параметр%%слово}

Удаляется соответствующий суффикс шаблона. Слово расширяется для получения шаблона так же как расширение имен файлов. Если шаблону соответствует конечная часть значения параметра, то результатом расширения будет значение параметра, в случае с коротким шаблоном »%» и длинным шаблоном »%%» удаляется. Если параметр «@» или «*» операция удаления шаблона применяется к каждому позиционному параметру и подставляется в полученный в результате список. Если параметр представляет собой переменную индексного массива с «@» или «*» операция удаления шаблона применяется к каждому элементу массива по очереди, и расширяется в полученный в результате список.

${параметр/шаблон/строка}

Замещение шаблона. Шаблон расширяется для получения шаблона, так же как расширения имен файлов. Параметр расширяется и самое длинное совпадение шаблона, его значение заменяется строкой. Если шаблон начинается с «/» все совпадения шаблонов заменяются строкой. Обычно заменяется лишь первое совпадение. Если шаблон начинается с «#» он должен соответствовать значению в начале параметра. Если шаблон начинается с «%» он должен соответствовать концу значения параметра. Если строка пустая, то совпадение шаблона будет удалено и «/» следующий шаблон может быть опущен. Если параметр «@» или «*» операция замены применяется к каждому позиционному параметру и подставляется в полученный в результате список. Если параметр представляет собой индексный массив с «@» или «*» операция замены применяется к каждому элементу массива по очереди и подставляется в полученный в результате список.

${параметр^шаблон}

${параметр^^шаблон}

${параметр,шаблон}

${параметр,,шаблон}

Случайное изменение. Это расширение изменяет случайным образом буквы в параметре. Шаблон расширяется для получения шаблона так же как расширение имен файлов. Оператор «^» преобразует прописные буквы соответствующего шаблона в верхний регистр, оператор «,» преобразует соответствующие заглавные буквы в нижний регистр. «^^» и «,,» расширения преобразовывают каждый соответствующий символ в расширенное значение, «^» и «,» расширения соответствуют и преобразовывают только первый символ в расширенном значении. Если шаблон не указан, он рассматривается как «?» который соответствует каждому символу. Если параметр «@» или «*» операция случайной модификации применяется к каждому позиционному параметру и подставляется в полученный в результате список. Если параметр представляет собой индексный массив с «@» или «*» операция случайной модификации применяется к каждому элементу массива по очереди и подставляется в полученный в результате список.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *