Обзор
Всякий раз, когда мы разговариваем с удаленным сервером или делаем что-либо в оболочке, оболочка сохраняет данные в виде переменных, которые она хранит в области, которая называется средой . Среду оболочки можно определить как область хранения, которую оболочка компилирует каждый раз при запуске нового сеанса оболочки. Это сделано для того, чтобы среда содержала все локальные или глобальные переменные, которые мы определили с момента ее последнего запуска. Мы узнаем, какие локальные и глобальные переменные находятся в следующем разделе.
Типы переменных среды
В среде Bash есть два типа переменных среды, которые могут быть определены пользователем для использования в сценариях или программах оболочки, которые они пишут:
- Глобальные переменные
- Локальные переменные
Глобальные переменные, которые определены как переменные среды, доступны во всех сеансах оболочки, которые компилируются оболочкой, но локальные переменные доступны только в выполняющейся в данный момент оболочке, и они будут потеряны после закрытия сеанса оболочки. . В этом уроке мы изучим, как определять глобальные и локальные переменные для среды Bash, а также увидим, какие из зарезервированных переменных не могут быть установлены как локальные или глобальные переменные в среде Bash.
Создание переменных
И локальные, и глобальные переменные чувствительны к регистру и обычно пишутся с большой буквы. Согласно соглашению, локальные переменные должны храниться в нижнем регистре, а глобальные — в верхнем регистре. Хотя это всего лишь соглашение, и вы можете оставить любое имя как для локальных, так и для глобальных переменных. Имя переменной не может начинаться с числа и должно содержать только символы в начале.
Давайте попробуем создать недопустимую переменную на примере:
Вот что мы получаем с помощью этой команды:

Создание недопустимой переменной
Ниже показано общее практическое правило для создания переменных:
Обратите внимание, что НЕ помещайте пробелы вокруг символа равенства, это вызовет ошибки. Кроме того, рекомендуется заключать в кавычки строковые значения, которые мы определяем для переменной, чтобы уменьшить вероятность ошибок. Давайте попробуем определить переменную и распечатать ее в оболочке:
echo $ website
Вот что мы получаем с помощью этой команды:

Переменная печати
Обратите внимание, что переменная, которую мы определили в оболочке выше, является локальной переменной, и эта переменная будет удалена, как только мы перезапустим оболочку. Чтобы убедиться в этом, перезапустите оболочку и попробуйте снова напечатать переменную:

Локальная переменная теряется при перезапуске оболочки
Экспорт переменных
Чтобы преобразовать локальную переменную, которую мы определили выше, в глобальную переменную, мы можем экспортировать переменную, добавив ее в файл .bashrc , чтобы он был доступен даже при перезапуске оболочки. Отредактируйте файл .bashrc с помощью этой команды :
Теперь мы отредактируем файл и добавим в конец следующий контент:
export WEBSITE = ‘LinuxHint’
После добавления содержимого сохраните и закройте файл. Если теперь мы попытаемся распечатать переменную, она все равно не будет существовать. Это связано с тем, что нам нужно перезагрузить файл в память с помощью следующей команды:
Как только это будет сделано, переменная будет напечатана (даже после перезапуска):

Экспорт переменных
Зарезервированные переменные
Резерв Bash d переменных
Зарезервированные переменные в Bash — это те, которые предварительно определены в оболочке. Мы можем использовать их, не определяя их, например:

Печать зарезервированных переменных
В BASH есть полный список переменных, например:
auto_resume | Управляет тем, как оболочка взаимодействует с пользователем и элементом управления заданиями. |
BASH | Предоставляет полную путь, который используется для выполнения текущего сеанса Bash |
BASH_ENV | Значение этой переменной раскрывается и используется как имя файл запуска перед выполнением сценария |
BASH_VERSION | Предоставляет номер версии текущего экземпляра оболочки Bash |
BASH_VERSINFO | Предоставляет информацию о версии текущего экземпляра оболочки Bash |
COLUMNS | Используется плагинами для определения ширины терминала при печати списков выбора. |
COMP_CWORD | Предоставляет текущую позицию курсора на th оболочка |
COMP_LINE | Предоставляет текущий номер строки в оболочке |
COMP_POINT | Предоставляет индекс текущей позиции курсора относительно начала текущей команды |
COMP_WORDS | Массив, который предоставляет список уникальных слов в командной строке |
COMPREPLY | Массив строковых значений, с помощью которых Bash обеспечивает функцию автозаполнения |
DIRSTACK | Массив строковых значений, содержащий содержимое текущего стека каталогов |
EUID | Предоставляет идентификатор текущего пользователя |
FCEDIT | Редактор, используемый по умолчанию параметром -e встроенной команды fc. |
FIGNORE | Список суффиксов, разделенных двоеточиями. Строковые значения, которые необходимо игнорировать при выполнении автозавершения имени файла в командной строке. |
FUNCNAME | Возвращает имя выполняемой функции оболочки |
GLOBIGNORE | Список суффиксов, разделенных двоеточиями. Шаблоны строк, которые необходимо игнорировать при раскрытии имени файла |
ГРУППЫ | Определяет список групп, членом которых является текущий пользователь |
HISTCMD | Индекс в списке истории текущей команды |
HISTCONTROL | Определяет, добавлена ли команда в файл истории |
HISTFILE | Предоставляет имя файла, в котором хранится история команд. Значение по умолчанию — ~/.bash_history. |
HISTFILESIZE | Определяет максимальное количество строк, хранящихся в файле истории |
HISTIGNORE | Шаблон, разделенный двоеточиями. Строки, используемые для определения того, какие командные строки должны храниться в файле истории |
HISTSIZE | Определяет максимальное количество команд для сохранения в списке истории |
HOSTFILE | Содержит имя файла в том же формате, что и/etc/hosts, который должен быть прочитан, когда оболочке необходимо заполнить имя хоста |
HOSTNAME | Предоставляет имя текущего хоста |
HOSTTYPE | Предоставляет имя машины, на которой запущен Bash |
IGNOREEOF | Решите, что делать, когда команда получает только ввод EOF |
INPUTRC | Предоставляет имя файла инициализации Readline, по умолчанию/etc/inputrc |
LANG | Определить локаль ca тегория не выбрана с переменной, начинающейся с LC_. |
LC_ALL | Переопределяет значение LANG и значений LC_, определяющих категорию локали |
LC_CTYPE | Определяет, как символы и классы символов интерпретируются при раскрытии имени файла и сопоставлении с образцом |
LC_MESSAGES | Предоставляет данные локали, используемые для перевода строк в двойных кавычках, которым предшествует символ «$». |
LC_NUMERIC | Предоставляет категорию локали, используемую для форматирования чисел |
LINENO | Предоставляет номер строки сценария или функции оболочки, выполняемой в данный момент |
MACHTYPE | Строка, полностью описывающая тип системы, на которой выполняется Bash, в стандартном формате GNU CPU-COMPANY-SYSTEM |
OLDPWD | Предыдущий рабочий каталог, установленный командой cd |
OPTERR | Если установлено значение 1, Bash отображает сообщения об ошибках, сгенерированные встроенным getopts |
OSTYPE | Описывает ОС Bash, на которой работает |
PIPESTATUS | Переменная массива, содержащая список значений статуса выхода из процессов в последнем запущенном конвейере переднего плана |
POSIXLY_CORRECT | Если эта переменная установлена, оболочка перейдет в режим POSIX при запуске |
PPID | Определенный идентификатор процесса t родительский процесс оболочки |
PROMPT_COMMAND | Если установлено, значение интерпретируется как команда для выполнения перед печатью каждого основного приглашение (PS1). |
PS3 | Значение этой переменной используется в качестве приглашения для команды выбора. По умолчанию «‘ #? ‘” |
PS4 | Значение — это приглашение, напечатанное перед выводом командной строки, когда установлена опция -x; по умолчанию «+». |
PWD | Определяет текущий рабочий каталог |
RANDOM | При каждом обращении к этому параметру генерируется случайное целое число от 0 до 32767. Присвоение значения этой переменной запускает генератор случайных чисел. |
REPLY | Переменная по умолчанию для встроенного чтения |
SECONDS | Определяет текущий срок службы оболочки в секундах |
ОБОЛОЧКИ | Список параметров оболочки, которые в данный момент включены |
SHLVL | Количество текущих активные оболочки Bash |
TIMEFORMAT | Формат даты, отображаемой в оболочке |
UID | User ID текущего активного пользователя оболочки |
Попробуйте распечатать эти переменные, чтобы увидеть, как они работают, точно так же, как мы делали это в начале.
Зарезервированные переменные Bourne Shell
Как и параметры оболочки Bash, которые мы предоставили выше, оболочка Bourne также имеет несколько зарезервированных переменных. Вот простые переменные оболочки, которые определяет оболочка:
CDPATH | Список разделенных двоеточиями каталоги, используемые в качестве пути поиска для встроенной команды cd. |
HOME | Домашний каталог текущего пользователя; по умолчанию для встроенного компакт-диска. Значение этой переменной также используется тильдой.. |
IFS | Список символов, разделяющих поля; используется, когда оболочка разделяет слова как часть раскрытия |
Если для этого параметра задано имя файла и MAILPATH переменная не установлена, Bash информирует пользователя о прибытии почты в указанный файл. | |
MAILPATH | Двоеточие- разделенный список имен файлов, который оболочка периодически проверяет на наличие новой почты. |
OPTARG | Значение последнего обработанного аргумента параметра командой getopts |
OPTIND | Индекс последнего аргумента параметра, обработанного команда getopts |
PATH | Список каталогов, разделенных двоеточиями, в которых оболочка ищет команды. |
PS1 | Определяет первую строку приглашения со значением по умолчанию «’ s- v $ ‘”. |
PS2 | Определяет дополнительную строку приглашения со значением по умолчанию«’> ‘» |
Специальные параметры
У нас также может быть пара метров, которые оболочка обрабатывает специально, которые могут использоваться только как ссылки, и присвоение им значения невозможно.
$ * | Расширяется до позиционных параметров, начиная с единицы. Когда раскрытие происходит в двойных кавычках, оно заменяется одним словом со значением каждого параметра, разделенным первым символом специальной переменной IFS. |
[ email protected] | Предоставляет позиционные параметры, начиная с единицы. Когда раскрытие происходит в двойных кавычках, каждый параметр заменяется отдельным словом. |
$ # | Предоставляет количество позиционных параметры в десятичном формате. |
$? | Предоставляет статус выхода последнего выполненного конвейера переднего плана. |
$ — | Знак дефиса указывает текущие флаги параметров, указанные при вызове встроенной командой set или заданные сама оболочка (например, -i) |
$$ | Предоставляет текущий идентификатор процесса оболочки |
$! | Предоставляет текущий идентификатор процесса последней выполненной фоновой команды |
$ 0 | Предоставляет имя текущей оболочки или сценария оболочки |
Давайте попробуем пример позиционных параметров:
echo «$ 2 — это 2-й позиционный параметр.»
echo «$ 3 — третий позиционный параметр . «
echo
echo» Общее количество позиционных параметров составляет $ #. «
Когда мы запускаем эту команду с некоторыми параметрами, мы можем видеть следующий вывод:

Распечатать позиционные параметры
Заключение
В этом уроке мы рассмотрели, как мы можем определять и использовать переменные в Среда Bash и что такое зарезервированные переменные в оболочке.