Bash - командный интерпретатор GNU Bourne

Подстановка значений параметров


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

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

${параметр}

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

Если первый символ параметра - восклицательный знак, начинается косвенная подстановка. Командный интерпретатор bash использует значение переменной, имя которой задается остальной частью параметра, в качестве имени переменной, значение которой необходимо подставить, а не собственно значения. Это называется косвенной заменой.

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

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

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

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

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

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

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


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



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

${параметр:m}

${параметр:m:n}


Подстановка подстрок. Подставляет символы значения параметра, начиная с указанного смещения m и вплоть до заданной длины n. Если длина не указана, подставляет символы с указанного смещения и до конца. В качестве длины и смещения можно задавать арифметические выражения (см. раздел "" ниже). Длина должна быть неотрицательным числом. Если смещение - отрицательное число, оно отсчитывается с конца значения параметра. Если параметр - @, результат - n позиционных параметров, начиная с параметра m. Если параметр - массив с индексом @ или *, результат - n элементов массива, начиная с ${параметр[m]}. Индексация подстрок начинается с нуля, за исключением позиционных параметров, которые индексируются, начиная с 1.

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

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

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

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


Слово рассматривается как шаблон, аналогичный шаблону имен файлов. Если шаблон сопоставляется с началом значения параметра, то результатом будет значение параметра, из которого удалена самая короткая (в случае #) или самая длинная (в случае ##) подстрока. Если параметр - @ или *, операция удаления шаблона применяется поочередно к каждому позиционному параметру и подставляется полученный в результате список. Если параметр - массив с индексом @ или *, операция удаления шаблона применяется поочередно к каждому элементу массива и подставляется полученный в результате список.

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

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


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



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

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


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


Содержание раздела