Переменные окружения
Тема дорожной карты · Bash
Переменные окружения в Bash — это именованные значения, хранящиеся в окружении процесса и наследуемые дочерними процессами; они устанавливаются с помощью export VAR=value, чтобы быть доступными подпроцессам, или определяются без export как локальные переменные оболочки, существующие только в текущем скрипте. Стандартные переменные окружения Linux, такие как $PATH, $HOME, $USER, $SHELL и $PWD, всегда доступны в Bash-скриптах и управляют основными аспектами разрешения команд и навигации в командной строке. Рекомендуемая практика написания shell-скриптов — считывать чувствительные значения из переменных окружения, а не прописывать их жёстко в скриптах: db_pass="${DB_PASSWORD:?DB_PASSWORD must be set}" одновременно читает переменную и завершает скрипт с понятным сообщением, если она не задана. Команда env выводит все текущие переменные окружения, unset VAR удаляет переменную из окружения, а VAR=value command устанавливает переменную только на время одной команды, не загрязняя окружение родительской оболочки. Понимание переменных окружения необходимо для написания переносимых скриптов автоматизации Bash, настройки поведения системы Linux и безопасной передачи конфигурации через CI/CD-конвейеры.
Как это работает
Переменные окружения: name="value" (без пробелов вокруг =), используются как $name или ${name} (форма с фигурными даёт ${name}_suffix). Локальные в функциях: local x. Read-only: readonly. Экспортируемые (в подпроцессы): export NAME=value. Специальные: $0 (имя скрипта), $1-$9 (позиционные аргументы), $# (количество), $@ (все как отдельные слова), $* (все как одно), $? (последний exit-код), $$ (PID), $! (последний bg PID).
Когда применять
Всегда закавычивайте раскрытие переменных ("$x", не $x) — незакавыченные word-split по whitespace + glob-расширяются, ломаясь на именах файлов с пробелами. ${var:-default} — дефолт, ${var:?error} — требовать значение, ${var:+alt} — "alt, только если var задана". local внутри функций, чтобы не засорять parent-scope. ЗАГЛАВНЫЕ для env-vars + констант, lower для локалов.
Типичные ошибки
Ловушки Переменные окружения: name = "value" с пробелами (парсится как команда); ЗАГЛАВНЫЕ для всего ("коллизии с env-переменными"); не используют local (переменные утекают к caller); echo $foo вместо echo "$foo" (word-splitting кусает).