Linux

Переменные оболочки Linux: подробное руководство по использованию

Этот гайд подробно объясняет, что такое переменные оболочки в Linux, как их создавать, изменять и использовать в командной строке и скриптах. Вы научитесь работать с пользовательскими и системными переменными, понимать их область видимости и применять их для автоматизации задач.

Обновлено 17 февраля 2026 г.
15-20 мин
Низкая
FixPedia Team
Применимо к:Bash 4.0+Zsh 5.0+Ubuntu 20.04+CentOS 8+

Введение / Зачем это нужно

Переменные оболочки (shell variables) — это фундаментальный механизм Linux-терминала, позволяющий хранить и повторно использовать данные: пути к файлам, настройки программ, результаты команд. Они являются основой для написания эффективных скриптов на Bash/Zsh, настройки среды разработки и автоматизации рутинных задач. Понимание работы с переменными кардинально повышает эффективность работы в командной строке.

Требования / Подготовка

  • Доступ к терминалу Linux (любого дистрибутива: Ubuntu, Fedora, Debian, Arch и т.д.).
  • Базовое знакомство с командной строкой.
  • Используемая оболочка (shell) по умолчанию — Bash (рекомендуется) или Zsh. Проверить можно командой echo $SHELL.
  • Права на выполнение стандартных команд (echo, export, unset, set, env).

Шаг 1: Объявление и присвоение значения переменной

Создание переменной выполняется простым присваиванием. Крайне важно: вокруг знака равенства = не должно быть пробелов. Имя переменной может содержать буквы, цифры и символ подчёркивания (_), но не может начинаться с цифры.

# Простое объявление
GREETING="Привет, мир!"

# Можно присвоить результат команды (используем команду substitution)
CURRENT_DATE=$(date +%Y-%m-%d)
USER_HOME=$(echo $HOME) # $HOME — уже существующая системная переменная

# Пример с числом (числа в shell — это тоже строки, но для арифметики есть специальный синтаксис)
COUNTER=10

💡 Совет: Всегда заключайте значение в кавычки ("), особенно если оно содержит пробелы или специальные символы. Это предотвратит ошибки интерпретации.

Шаг 2: Чтение и использование значения

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

# Простое чтение
echo $GREETING
# Вывод: Привет, мир!

# Использование в строке с ${}
echo "Сегодня: ${CURRENT_DATE}, пользователь: $USER"
# Вывод: Сегодня: 2026-02-17, пользователь: fixpedia

# Конкатенация (сложение строк)
PATH_SUFFIX="/myapp/bin"
FULL_PATH="/usr/local"$PATH_SUFFIX
echo $FULL_PATH
# Вывод: /usr/local/myapp/bin

# Использование в команде
LIST_FILE="filelist.txt"
wc -l $LIST_FILE

Шаг 3: Экспорт переменных (сделать видимой для других программ)

По умолчанию переменная существует только в текущей оболочке. Чтобы она стала переменной окружения (environment variable) и была доступна для любых программ и скриптов, запускаемых из этой оболочки, её нужно экспортировать.

# 1. Объявить
MY_APP_CONFIG="/etc/myapp/config.conf"
# 2. Экспортировать
export MY_APP_CONFIG

# Проверить, что переменная окружения
env | grep MY_APP_CONFIG
# Вывод: MY_APP_CONFIG=/etc/myapp/config.conf

# Теперь любой скрипт или программа, запущенная из этого терминала,
# сможет прочитать $MY_APP_CONFIG.

Можно объявить и экспортировать переменную одной командой:

export API_KEY="secret123"

Шаг 4: Специальные типы переменных

4.1. Только для чтения (readonly)

После объявления такой переменной её значение нельзя изменить или удалить. Полезно для констант.

readonly APP_VERSION="2.1.0"
APP_VERSION="3.0.0" # Ошибка! bash: APP_VERSION: readonly variable

4.2. Локальные переменные в функциях (local)

Внутри функции (или скрипта) переменная, объявленная как local, видна только внутри этой функции/скрипта и не затирает глобальную переменную с таким же именем.

GLOBAL_VAR="я глобальная"

my_function() {
    local GLOBAL_VAR="я локальная"
    echo "Внутри функции: $GLOBAL_VAR"
}
my_function
echo "Снаружи функции: $GLOBAL_VAR"

# Вывод:
# Внутри функции: я локальная
# Снаружи функции: я глобальная

Шаг 5: Просмотр и удаление переменных

  • Просмотр всех переменных (локальных и окружения): set
  • Просмотр только переменных окружения: env или printenv
  • Удаление переменной: unset ИМЯ_ПЕРЕМЕННОЙ
    unset GREETING
    echo $GREETING # Вывод пустой строки
    

Шаг 6: Работа со встроенными и специальными переменными

Оболочка предоставляет множество полезных встроенных переменных. Вот ключевые:

ПеременнаяЗначениеПример использования
$?Код возврата последней выполненной команды (0 = успех)if [ $? -eq 0 ]; then echo "OK"; fi
$#Количество аргументов, переданных скрипту/функцииВнутри скрипта: echo "Аргументов: $#"
$@, $*Все аргументы, переданные скрипту/функцииfor arg in "$@"; do ...; done
$0Имя самого скрипта или оболочкиecho "Запущен скрипт: $0"
$$PID (идентификатор процесса) текущей оболочкиecho "Мой PID: $$"
$!PID последнего фонового процессаsleep 10 & echo $!
$HOMEДомашний каталог текущего пользователяcd $HOME
$PWDТекущий рабочий каталогecho "Вы находитесь в: $PWD"
$PATHСписок каталогов, где система ищет исполняемые файлыecho $PATH

Проверка результата

  1. Создайте переменную: TEST_VAR="success".
  2. Экспортируйте её: export TEST_VAR.
  3. Запустите дочерний процесс (например, новый под-терминал или скрипт), который выводит echo $TEST_VAR. Вы должны увидеть success.
  4. Удалите переменную: unset TEST_VAR.
  5. Повторите шаг 3 — вывод должен быть пустым.

Возможные проблемы

  • Ошибка command not found при присваивании. Причина: пробелы вокруг =. Решение: VAR=value, а не VAR = value.
  • Переменная не видна в скрипте. Причина: вы не экспортировали её (export). Решение: используйте export VAR перед запуском скрипта или объявите внутри скрипта.
  • Пустое значение при чтении. Причина: переменная не была объявлена, была удалена (unset) или её имя написано с ошибкой (регистр имеет значение!). Решение: проверьте имя командой echo $ИМЯ или env | grep ИМЯ.
  • Проблемы с пробелами и спецсимволами. Причина: значение не заключено в кавычки. Решение: всегда используйте VAR="значение с пробелом" или VAR='значение с $спецсимволом' (одинарные кавычки отключают подстановку).
  • readonly variable при попытке изменения. Причина: переменная была объявлена как readonly. Решение: создайте новую переменную с другим именем или не используйте readonly для тех, что нужно менять.

Часто задаваемые вопросы

Как временно добавить переменную только для одной команды?
Чем отличается `export` от обычного присваивания?
Как сделать переменную доступной только для чтения?
Где хранятся системные переменные, которые видны всем пользователям?

Полезное

Объявление и присвоение значения переменной
Чтение значения переменной
Экспорт переменной в дочерние процессы
Удаление переменной
Работа с переменными окружения

Эта статья помогла вам решить проблему?