`

Переменные и константы в Bash

Определение переменных в Bash

Переменные в Bash позволяют хранить в себе определенные числовые или текстовые значения.

Для объявления переменной достаточно написать ее имя и значение, которое она в себе будет хранить. При обращении к переменной, нужно предварять ее знаком доллара - $:

Не ставьте пробелы до и после знака равенства - =, т.к. в этом случае оболочка может ошибочно принять имя переменной за имя команды.
Правильно: my_var=45
Неправильно: my_var = 45

Системные переменные

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

В именах системных переменных принято использовать только заглавные буквы, а слова отделяются символом подчеркивания, например PS1, PATH, BASH_VERSION и др.

Узнать список системных переменных можно с помощью следующих команд.

set

или

env

или

printenv

Использование переменных

Переменные часто используются в вывод строк. Чтобы указать переменную в строке укажите ее внутри двойных кавычек.

meliorem@ubuntu:~$ show_name.sh
My name is Oleg

Если использовать одинарные кавычки, то ссылка на переменную будет отображена как обычный текст.

meliorem@ubuntu:~$ show_name.sh
My name is $my_name

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

meliorem@ubuntu:~$ cmd_output.sh
Folders: 10
IP address: 192.168.0.190

Также переменным можно присвоить значение содержимого какого-либо файла:

Иногда случаются ситуации когда текст нужно подставить вплотную к значению переменной.

Например, в данной ситуации мы хотим слить воедино значение переменной $prefix и следующее за ней слово - "rock".

В результате мы получим только часть вывода т.к. интерпретатор будет пытаться найти переменную $prefixrock, которой у нас нет.

meliorem@ubuntu:~$ var_merge.sh
 cafe.

Чтобы получить желаемое слияние текста и значения переменной воспользуемся следующим синтаксисом. Установим имя переменной внутри фигурных скобок - {} с предваряющим знаком - $

meliorem@ubuntu:~$ var_merge.sh
Hardrock cafe.

Именование переменных

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

Имена переменных чувствительны к регистру символов, т.е. переменные $My_Var и $my_var - это разные переменные.

Имена переменных не могут начинаться с цифры и содержать какие-либо знаки, кроме знака подчеркивания - _.

Переменные со значением по умолчанию

Не объявленные переменные могут принимать значения по умолчанию.

Если переменная не объявлена, то с помощью оператора - := мы можем задать ей начальное значение.

Рассмотрим пример установки значения по умолчанию.

Значение по умолчанию можно задать только один раз.

meliorem@ubuntu:~$ var_default.sh
$planet:= Mars
$planet:= Mars
$planet: Mars
$planet: Jupiter

Область видимости переменных

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

Если вы хотите чтобы переменная стала локальной, добавьте ключевое слово - local перед ее именем.

meliorem@ubuntu:~$ show_name.sh
Jane
John
Jane

Константы

В Bash помимо переменных есть также и константы, разница лишь в том, что их значения нельзя изменять.

Для объявления константы используйте ключевое слово readonly.

Константу нельзя удалить с помощью unset.

meliorem@ubuntu:~$ constant.sh
/usr/local/bin/somescript.sh
constant.sh: line 4: script_path: readonly variable