Библиотека сайта rus-linux.net
Руководство по Bash для начинающих | ||
---|---|---|
Назад | Глава 10: Подробнее о переменных | Вперед |
Типы переменных
Общие правила присваивания значений переменным
Как мы уже видели, Bash понимает много различных видов переменных или параметров. До сих пор мы не слишком беспокоились о том, для переменной какого типа мы выполняем операцию присваивания, поскольку в наших переменных можно было хранить любое значение, которое мы им присваивали. Ниже показаны простые примеры, набираемые в командной строке:
[bob in ~] VARIABLE=12 [bob in ~] echo $VARIABLE 12 [bob in ~] VARIABLE=string [bob in ~] echo $VARIABLE string
Есть случаи, когда вы хотите избежать такого поведения, например, при работе с телефонными и другими номерами. Помимо целых чисел и переменных, вы также можете указать переменную, которая будет константой. Это часто делается в начале скрипта, когда объявляется значение константы. После этого, можно только ссылаться на имя константной переменной, так что, если константу нужно изменить, это можно сделать только один раз. Переменная может также представлять собой последовательность переменных любого типа, это так называемый массив переменных (VAR0
, VAR1
, VAR2
, ... VARN
).
Использование встроенной команды declare
С помощью инструкции declare мы можем ограничить значения, присваиваемые переменным.
Синтаксис инструкции declare следующий:
declare OPTION(s) VARIABLE=value
Для определения типа данных, которые может хранить переменная, и задания атрибутов используются следующие параметры:
Таблица 10.1. Параметры встроенной команды declare
Параметр | Значение |
| Переменная является массивом. |
| Используются только имена функций. |
| Переменная должны трактоваться как целое число; арифметические сравнение выполняется только тогда, когда ей присваивается значение (смотрите раздел "Арифметические выражения"). |
| Показываются атрибуты и значения каждой переменной. Когда используется параметр |
| Делает переменную доступной только для чтения. В следующих инструкциях этим переменным нельзя присваивать значения и нельзя значения этих переменных изменять. |
| Устанавливает для переменной атрибут trace. |
| Помечает переменную как экспортируемую в среду последующих команд. |
Для того, чтобы отключить действие параметра, используйте + вместо -. Когда команда declare используется внутри функции, то создаются локальные переменные.
В следующем примере показано, как задание типа переменной влияет на значение переменной.
[bob in ~] declare -i VARIABLE=12 [bob in ~] VARIABLE=string [bob in ~] echo $VARIABLE 0 [bob in ~] declare -p VARIABLE declare -i VARIABLE="0"
Обратите внимание, что в Bash есть возможность объявить числовое значение, но нет возможности объявлять строковые значения. Это обусловлено тем, что, по умолчанию, если спецификации не заданы, в переменной можно хранить любой тип данных:
[bob in ~] OTHERVAR=blah [bob in ~] declare -p OTHERVAR declare -- OTHERVAR="blah"
Как только вы ограничили тип значения, присваиваемого переменной, в ней можно хранить данные только этого типа. Вы можете ограничить переменную, чтобы она использовалась либо только для целых чисел, либо только как константа, либо только как массив.
Информацию о кодах возврата смотрите в документации по Bash.
Константы
В Bash константы создаются путем указания переменных, доступных только для чтения. С помощью встроенной команды readonly переменная отмечается, как не допускающая изменений своего значения. Синтаксис следующий:
readonly OPTION VARIABLE(s)
Значения этих переменных нельзя будет изменять с помощью последующих операций присваивания. Если указан параметр -f
, переменная является функцией командной оболочки; смотрите главу 11 "Функции". Если параметр не указан или если указан параметр -p
, то будет показан список всех переменных, доступных только для чтения. Когда используется параметр -p
, выходные данные можно повторно использовать как входные.
Код возврата равен нулю, если не был указан неверный параметр, если не оказалось, что одна из переменных или функций не существует, или если параметр -f
не указан для имени переменной,а не для имени функции.
[bob in ~] readonly TUX=penguinpower [bob in ~] TUX=Mickeysoft bash: TUX: readonly variable
Предыдущий раздел: | Оглавление | Следующий раздел: |
Подводим итоги главы 9 | Переменные массивы |