В чем разница между переменными export и var в контексте оболочки Linux?

«В чем разница между переменными export и var в контексте оболочки Linux?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В контексте оболочки (например, bash) export и простое присваивание (VAR=value) — это разные механизмы управления областью видимости переменных.

Ключевое отличие:

  • Локальная переменная (присваивание): Создается только для текущей сессии оболочки. Она не передается дочерним процессам (например, другим скриптам или командам, запущенным из этой оболочки).
  • Экспортированная переменная (export): Также доступна в текущей сессии, но копируется в окружение всех дочерних процессов, делая ее для них видимой.

Пример:

# Локальная переменная. Не видна в дочерних процессах.
MY_LOCAL_VAR="local_value"

# Экспортированная переменная. Видна в дочерних процессах.
export MY_GLOBAL_VAR="global_value"

# Проверка:
bash -c 'echo Локальная: $MY_LOCAL_VAR'       # Вывод: Локальная:
bash -c 'echo Глобальная: $MY_GLOBAL_VAR'    # Вывод: Глобальная: global_value

Практическое применение в DevOps:

  • export используется для передачи конфигурационных параметров (например, путей, токенов, адресов серверов) в скрипты сборки, инструменты оркестрации (Ansible, Terraform) или другие процессы в конвейере CI/CD.
  • Для постоянного хранения таких переменных используются файлы окружения (.env) или секреты в системах вроде HashiCorp Vault, Kubernetes Secrets.