В Linux встроенная в оболочку Bash команда declare
объявляет переменные и функции в сценариях оболочки, устанавливая их атрибуты и отображая значения.
Переменной (резервной переменной) присваивается некоторое значение для последующего использования в коде.
Содержание
Синтаксис
$ declare [-aAfFgiIlnrtux] [name[=value] ...]
или
$ declare -p [-aAfFilnrtux] [name ...]
Параметры
Самые необходимые параметры
- -f
- Ограничить действие или отображение имён и определений функций
- -F
- Ограничить отображение только имён функций (плюс номер строки и исходный файл при отладке)
- -g
- Создавать глобальные переменные при использовании в функции оболочки; в противном случае игнорируется
- -I
- При создании локальная переменная наследует атрибуты и значение переменной с тем же именем в предыдущей области
- -p
- Отображать атрибуты и значение каждого ИМЕНИ
Параметры, устанавливающие атрибуты
- -a
- Создать индексированные массивы ИМЁН (если поддерживается)
- -A
- Создать ассоциативные массивы ИМЁН (если поддерживается)
- -i
- Создать ИМЕНА с атрибутом
integer
- -l
- Преобразовать значение каждого ИМЕНИ в нижний регистр при назначении
- -n
- Сделать ИМЯ ссылкой на переменную, названную по её значению
- -r
- Сделать ИМЕНА доступными только для чтения
- -t
- Создать ИМЕНА с атрибутом
trace
- -u
- Преобразовать значение каждого ИМЕНИ в верхний регистр при назначении
- -x
- Сделать экспорт ИМЁН
Использование +
вместо -
отключает данный атрибут.
Переменные с целочисленным атрибутом имеют арифметическую оценку, выполняемую, когда переменной присваивается значение.
При использовании в функции команда declare
делает ИМЕНА локальными, как и команда local
. Опция -g
подавляет такое поведение.
Все параметры в интерфейсе командной строки (CLI) чувствительны к регистру. При их использовании это всегда следует помнить.
Использование команды declare в Linux
Утилита declare
очень полезна в сценариях bash. Её можно использовать для объявления различных типов переменных и функций с разными атрибутами.
Объявление переменной
Для объявления переменной её имя просто добавляется к команде. Переменной можно присвоить любое значение, используя знак равенства =
. Присвоенное переменной значение сохраняется в двойных кавычках " "
:
$ declare variable_name="value"
В качестве примера создаём переменную с именем var
:
oleg@mobile:~:$ declare var
oleg@mobile:~:$
Присваиваем значение типу переменной:
oleg@mobile:~:$ var=03
oleg@mobile:~:$
Смотрим присвоенное значение переменной, введя следующую команду и нажав Enter:
oleg@mobile:~:$ echo "the value of the variable is $var"
"the value of the variable is 03"
oleg@mobile:~:$
Команду echo обычно используют для отображения слов, помещённых в двойные кавычки " "
в качестве аргумента. При использовании перед именем знака доллара $
отображается его значение.
Назначение целочисленной переменной
Для объявления целочисленной переменной утилита запускается с опцией -i
:
oleg@mobile:~:$ declare -i number
oleg@mobile:~:$ number="7"
oleg@mobile:~:$ echo $number
7
oleg@mobile:~:$
Легко проверить, что если вместо целого числа задать слово, дробь и какие-либо арифметические действия, то мы не получим необходимого результата.
В качестве значения переменной задаём слово:
oleg@mobile:~:$ declare -i number
oleg@mobile:~:$ number="Year"
oleg@mobile:~:$ echo $number
0
oleg@mobile:~:$
В качестве значения переменной задаём дробь:
oleg@mobile:~:$ declare -i number
oleg@mobile:~:$ number="3.14"
bash: 3.14: ошибка синтаксиса: недопустимый математический оператор (неверный маркер «.14»)
Назначение массива
Для установки атрибута переменной в виде массива утилита используется с опцией -a
:
$ declare -a array_name[n]="value"
Здесь n
— номер элемента массива.
Итак, вводим следующую команду:
oleg@mobile:~:$ declare -a array
oleg@mobile:~:$
Для первого элемента массива значение n
будет 0
.
Вводим следующую команду:
oleg@mobile:~:$ echo ${array[0]}
Объявляем значения элементов массива:
oleg@mobile:~:$ odeclare array[0]="A"re array[0]="A"
odeclare array[1]="B"re array[1]="B"
odeclare array[2]="C"re array[2]="C"
odeclare array[3]="D"re array[3]="D"
odeclare array[4]="E"re array[4]="E"
Смотрим все значения переменной массива, введя следующую команду и нажав кнопку ENTER:
oleg@mobile:~:$ cho ${array[*]}
"A" "B" "C" "D" "E"
oleg@mobile:~:$
Были произведены следующие действия:
- объявление массива и проверка наличия какого-либо присвоенного значения;
- объявление значения элементов для массива (0-4);
- отображение значения элементов массива с помощью команды echo.
Преобразование букв строковых переменных в верхний регистр
Можно объявить переменную со строкой, состоящей из заглавных букв, используя вводимую команду с опцией -u
:
$ declare -u variable_name="string"
Итак, вводим следующую команду:
oleg@mobile:~:$ declare -u data="linux"
Смотрим присвоенное значение переменной, введя следующую команду и нажав кнопку ENTER:
oleg@mobile:~:$ oecho "This is a code language of $data"guage of $data"
"This is a code language of "LINUX""
oleg@mobile:~:$
Буквы из нижнего регистра были преобразованы в верхний.
Преобразование букв строковых переменных в нижний регистр
При назначении строки можно использовать буквы обоих регистров, запуская команду с опцией -l
:
$ declare -l variable_name="string"
Итак, вводим следующую команду:
oleg@mobile:~:$ declare -l name="LinuX"
Смотрим присвоенное значение переменной, введя следующую команду и нажав кнопку ENTER:
oleg@mobile:~:$ echo $name
"linux"
oleg@mobile:~:$
Значение выходной строки записано строчными буквами.
Установка переменной, доступной только для чтения
Подобное необходимо обычно при нежелании изменять в будущем значение переменной. В этом случае утилита запускается с опцией -r
:
$ declare -r variable_name="value"
Запускаем следующую команду:
oleg@mobile:~:$ declare -r g="9.8"
Теперь пробуем переназначить переменную g
, введя следующую команду и нажав кнопку ENTER:
oleg@mobile:~:$ declare -r g="9.9"
bash: declare: g: переменная только для чтения
oleg@mobile:~:$
Выходные данные сообщают, что переменная g
доступна только для чтения.
Заключение
В этой статье были приведены примеры использования команды declare
для объявления переменных с различными параметрами в сценариях Bash. Надеюсь, что многим пользователями Linux эта статья будет весьма полезной.