Параметры оболочки
Параметр — это сущность, хранящая значения. Это может быть name, число или один из перечисленных ниже специальных символов. Переменная — это параметр, обозначаемый с помощью name. У переменной есть value и ноль или более attributes. Атрибуты назначаются с помощью встроенной команды declare (см. описание встроенной команды declare в разделе Встроенные команды Bash). Встроенные команды export и readonly назначают определённые атрибуты.
Параметр считается установленным, если ему было присвоено значение. Пустая строка является допустимым значением. После установки переменную можно удалить только с помощью встроенной команды unset.
Переменной присваивается значение с помощью инструкции следующего вида:
name=[value]
Если value не указано, переменной присваивается пустая строка. Для всех значений value выполняются раскрытие тильды, раскрытие параметров и переменных, подстановка команд, арифметическое раскрытие и удаление кавычек (см. раздел Раскрытие параметров оболочки). Если установлен атрибут integer переменной, то value вычисляется как арифметическое выражение, даже если раскрытие $((…)) не используется (см. раздел Арифметическое раскрытие). Разбиение слов и раскрытие имён файлов не выполняются. Инструкции присваивания также могут использоваться в качестве аргументов встроенных команд alias, declare, typeset, export, readonly и local (команд объявления). В режиме POSIX (см. раздел Bash и POSIX) эти встроенные команды могут следовать в команде за одним или несколькими экземплярами встроенной команды command и сохраняют свойства инструкций присваивания. Например:
command export var=value
В контексте, где инструкция присваивания задаёт значение переменной оболочки или индексу массива (см. раздел Массивы), оператор «+=» добавляет данные к предыдущему значению переменной. Это относится и к аргументам команд объявления, таких как declare, которые принимают инструкции присваивания. Если оператор «+=» применяется к переменной, для которой установлен атрибут integer, текущее значение переменной и value вычисляются как арифметические выражения, а сумма результатов присваивается переменной. Текущее значение обычно является целочисленной константой, но может быть и выражением. Если оператор «+=» применяется к переменной-массиву с помощью составного присваивания (см. раздел Массивы), значение переменной не удаляется (в отличие от использования «=»), а новые значения добавляются в массив, начиная с индекса, на единицу большего максимального индекса массива (для индексированных массивов), либо добавляются как дополнительные пары ключ-значение в ассоциативный массив. При применении к переменной со строковым значением value раскрывается и добавляется к значению переменной.
Переменной можно назначить атрибут nameref с помощью параметра -n встроенных команд declare или local (см. раздел Встроенные команды Bash), чтобы создать ссылку на имя (nameref), то есть ссылку на другую переменную. Это позволяет косвенно работать с переменными. При обращении к переменной-ссылке на имя, присваивании ей значения, удалении её или изменении её атрибутов (кроме использования или изменения самого атрибута ссылки на имя) операция фактически выполняется над переменной, указанной значением переменной-ссылки на имя. Ссылку на имя часто используют внутри функций оболочки для обращения к переменной, имя которой передаётся функции в качестве аргумента. Например, если имя переменной передаётся функции оболочки в качестве первого аргумента, выполнение
declare -n ref=$1
внутри функции создаёт локальную переменную-ссылку на имя ref, значением которой является имя переменной, переданное в качестве первого аргумента. Обращения к ref и присваивания ей значений, а также изменения её атрибутов рассматриваются как обращения к переменной, присваивания ей значений и изменения её атрибутов, имя которой было передано как $1.
Если управляющая переменная цикла for имеет атрибут ссылки на имя, список слов может содержать список переменных оболочки; при выполнении цикла для каждого слова по очереди создаётся ссылка на имя. Переменным-массивам нельзя назначить атрибут ссылки на имя. Однако переменные-ссылки на имя могут ссылаться на переменные-массивы и индексированные элементы массивов. Ссылки на имя можно удалить с помощью параметра -n встроенной команды unset (см. раздел Встроенные команды Bourne Shell). В противном случае, если unset выполняется с именем переменной-ссылки на имя в качестве аргумента, удаляется переменная, на которую ссылается эта переменная-ссылка на имя.
При запуске оболочка считывает своё окружение и создаёт переменную оболочки для каждой переменной окружения с допустимым именем, как описано ниже (см. раздел Окружение).
Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
Licensed under the GNU Free Documentation License.
https://www.gnu.org/software/bash/manual/html_node/Shell-Parameters.html