Подстановка значений параметров
Символ $ обозначает подстановку значений параметров, подстановку реультатов выполнения команд или подстановку значений арифметических выражений. Имя параметра можно брать в фигурные скобки, что позволяет отделить его от идущих непосредственно за ним символов, которые не являются частью имени.
При использовании фигурных скобок, завершающей считается первая скобка }, не замаскированная обратной косой, не входящая в строку в кавычках, встроенное арифметическое выражение или подставляемую команду, или в подстановку значения другого параметра.
${параметр}
Подставляется значение указанного параметра. Фигурные скобки необходимы, если параметр является позиционным и номер позиции состоит из нескольких цифр или когда после параметра идет символ, не входящий в его имя.
Если первый символ параметра - восклицательный знак, начинается косвенная подстановка. Командный интерпретатор bash использует значение переменной, имя которой задается остальной частью параметра, в качестве имени переменной, значение которой необходимо подставить, а не собственно значения. Это называется косвенной заменой.
В каждом из описанных ниже случаев в полученном слове выполняется замена тильды, подстановка значений параметров, подстановка результатов выполнения команд и вычисление арифметических выражений. Если не выполняется подстановка подстрок, bash проверяет, не является ли параметр не установленным или не имеет ли он пустого значения; если не указать двоеточие, проверяется только, установлен ли параметр.
${параметр:-слово}
Использовать стандартное значение. Если параметр не установлен или имеет пустое значение, подставляется значение указанного слова. Иначе подставляется значение параметра.
${параметр:=слово}
Присвоить стандартное значение. Если параметр не установлен или имеет пустое значение, параметр получает значение указанного слова. Затем подставляется значение параметра. Присваивать таким образом значения позиционным и специальным параметрам нельзя.
${параметр:?слово}
Выдавать ошибку если параметр не установлен или имеет пустое значение. Если параметр имеет пустое значение или не установлен, указанное слово (или стандартное сообщение, если слово не задано) выдается в стандартный поток ошибок, и командный интерпретатор, если он не интерактивный, завершает работу. В противном случае, подставляется значение параметра.
${параметр:+слово}
Использовать альтернативное значение. Если параметр не установлен или имеет пустое значение, не подставляется ничего, в противном случае, подставляется указанное слово.
${параметр:m}
${параметр:m:n}
Подстановка подстрок. Подставляет символы значения параметра, начиная с указанного смещения m и вплоть до заданной длины n. Если длина не указана, подставляет символы с указанного смещения и до конца. В качестве длины и смещения можно задавать арифметические выражения (см. раздел "" ниже). Длина должна быть неотрицательным числом. Если смещение - отрицательное число, оно отсчитывается с конца значения параметра. Если параметр - @, результат - n позиционных параметров, начиная с параметра m. Если параметр - массив с индексом @ или *, результат - n элементов массива, начиная с ${параметр[m]}. Индексация подстрок начинается с нуля, за исключением позиционных параметров, которые индексируются, начиная с 1.
${#параметр}
Подставляется длина значения параметра в символах. Если параметр - * или @, подставляется количество позиционных параметров. Если параметр - массив с индексом * или @, подставляется количество элементов массива.
${параметр#слово}
${параметр##слово}
Слово рассматривается как шаблон, аналогичный шаблону имен файлов. Если шаблон сопоставляется с началом значения параметра, то результатом будет значение параметра, из которого удалена самая короткая (в случае #) или самая длинная (в случае ##) подстрока. Если параметр - @ или *, операция удаления шаблона применяется поочередно к каждому позиционному параметру и подставляется полученный в результате список. Если параметр - массив с индексом @ или *, операция удаления шаблона применяется поочередно к каждому элементу массива и подставляется полученный в результате список.
${параметр%слово}
${параметр%%слово}
Слово рассматривается как шаблон, аналогичный шаблону имен файлов. Если шаблон сопоставляется с конечной частью значения параметра, то результатом будет значение параметра, из которого удалена самая короткая (в случае %) или самая длинная (в случае %%) подстрока. Если параметр - @ или *, операция удаления шаблона применяется поочередно к каждому позиционному параметру и подставляется полученный в результате список. Если параметр - массив с индексом @ или *, операция удаления шаблона применяется поочередно к каждому элементу массива и подставляется полученный в результате список.
${параметр/шаблон/строка}
${параметр//шаблон/строка}
Шаблон задается аналогично шаблонам имен файлов. Самая длинная подстрока значения параметра, соответствующая шаблону, заменяется указанной строкой. В первом случае, заменяется только первое вхождение. Во втором случае, заменяются все вхождения шаблона. Если шаблон начинается с #, он должен сопоставляться начиная с начала значения параметра. Если же шаблон начинается с %, он должен сопоставляться с окончанием значения параметра. Если строка - пустая, соответсвующие шаблону подстроки удаляются и / после шаблона можно не указывать. Если параметр - @ или *, операция замены шаблона применяется поочередно к каждому позиционному параметру, и подставляется полученный в результате список. Если параметр - массив с индексом @ или *, операция замены шаблона применяется поочередно к каждому элементу массива и подставляется полученный в результате список.