← Назад к вопросам

В чем разница между переменными Export и Var?

1.0 Junior🔥 241 комментариев
#Linux и администрирование#Скриптинг и программирование

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Разница между export и var в контексте оболочки Bash/Shell

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

1. var=value — Объявление локальной переменной shell

Команда var=value создаёт переменную только в текущем процессе shell. Эта переменная недоступна для дочерних процессов (например, других скриптов или программ).

#!/bin/bash
MY_LOCAL_VAR="Только в этом скрипте"
echo $MY_LOCAL_VAR  # Выведет: Только в этом скрипте

# Запуск дочернего процесса
bash -c 'echo $MY_LOCAL_VAR'  # Выведет пустую строку - переменная НЕ видна!

2. export VAR=value — Экспорт в окружение (environment)

Ключевое слово export делает переменную доступной в окружении (environment) текущего процесса и всех его дочерних процессов. Это механизм передачи данных «вниз» по иерархии процессов.

#!/bin/bash
export MY_ENV_VAR="Видна детям"
echo $MY_ENV_VAR  # Выведет: Видна детям

# Дочерний процесс теперь видит переменную
bash -c 'echo $MY_ENV_VAR'  # Выведет: Видна детям

Ключевые различия в таблице

Аспектvar=value (локальная)export var=value (экспортированная)
Область видимостиТолько текущий shell-процессТекущий процесс + все дочерние процессы
Место храненияВнутренние структуры shellEnvironment variables (окружение процесса)
НаследованиеНе наследуетсяНаследуется дочерними процессами
ИспользованиеВременные вычисления в скриптеКонфигурация для дочерних программ

Практический пример из DevOps

В DevOps-практике export используется постоянно для настройки окружения:

# Настройка окружения для Docker Compose
export POSTGRES_PASSWORD="secure_password"
export API_KEY="your_key_here"

# Эти переменные будут доступны в контейнерах
docker-compose up -d

# Настройка для Terraform
export TF_VAR_region="eu-west-1"
export TF_VAR_instance_count=3
terraform apply

Важные нюансы

  1. Комбинированное использование:
VAR="значение"  # Сначала создаём
export VAR      # Затем экспортируем
# Или одной строкой:
export VAR="значение"
  1. Отмена экспорта:
export MY_VAR="test"
unset MY_VAR    # Полное удаление переменной
# Или:
export -n MY_VAR  # Только отмена экспорта (переменная остаётся локальной)
  1. Просмотр экспортированных переменных:
export -p  # Показать все экспортированные переменные
env        # Показать всё окружение процесса

Типичные сценарии использования в DevOps

  • var= (локальная):

    • Временные счётчики в циклах
    • Промежуточные результаты вычислений
    • Конфиденциальные данные, которые не должны «просачиваться» в дочерние процессы
  • export:

    • Настройка путей (PATH, LD_LIBRARY_PATH)
    • Параметры подключения к БД для приложения
    • Ключи API и секреты для инструментов инфраструктуры
    • Переменные окружения для контейнеров и оркестраторов

Заключение

Понимание разницы между локальными переменными shell и экспортированными переменными окружения критически важно для DevOps-инженера. Локальные переменные (var=) изолированы в текущем процессе и используются для внутренней логики скриптов. Экспортированные переменные (export var=) становятся частью окружения процесса и передаются всем дочерним процессам, что делает их идеальными для конфигурации инструментов, передачи секретов и настройки рабочего окружения всего стека технологий.