В чем разница между переменными Export и Var?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Разница между 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-процесс | Текущий процесс + все дочерние процессы |
| Место хранения | Внутренние структуры shell | Environment 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
Важные нюансы
- Комбинированное использование:
VAR="значение" # Сначала создаём
export VAR # Затем экспортируем
# Или одной строкой:
export VAR="значение"
- Отмена экспорта:
export MY_VAR="test"
unset MY_VAR # Полное удаление переменной
# Или:
export -n MY_VAR # Только отмена экспорта (переменная остаётся локальной)
- Просмотр экспортированных переменных:
export -p # Показать все экспортированные переменные
env # Показать всё окружение процесса
Типичные сценарии использования в DevOps
-
var=(локальная):- Временные счётчики в циклах
- Промежуточные результаты вычислений
- Конфиденциальные данные, которые не должны «просачиваться» в дочерние процессы
-
export:- Настройка путей (
PATH,LD_LIBRARY_PATH) - Параметры подключения к БД для приложения
- Ключи API и секреты для инструментов инфраструктуры
- Переменные окружения для контейнеров и оркестраторов
- Настройка путей (
Заключение
Понимание разницы между локальными переменными shell и экспортированными переменными окружения критически важно для DevOps-инженера. Локальные переменные (var=) изолированы в текущем процессе и используются для внутренней логики скриптов. Экспортированные переменные (export var=) становятся частью окружения процесса и передаются всем дочерним процессам, что делает их идеальными для конфигурации инструментов, передачи секретов и настройки рабочего окружения всего стека технологий.