Внутри Bash-скрипта переменные используются аналогичными способами, так как его синтаксис — это всего лишь набор последовательных команд терминала. Однако есть несколько отличительных черт.
При запуске обычной программы через терминал Linux командный интерпретатор создает отдельный процесс, который имеет уникальный идентификатор, зарегистрированный в операционной системе. Такой идентификатор имеет каждая программа, независимо от того работает она в терминале или запускается в фоновом режиме со стартом системы. Его принято называть PID-номером или просто PID.
Скрипты выполняются другим способом. В терминале уже работает один экземпляр командного интерпретатора Bash. Он отвечает за разбор и выполнение команд, вводимых пользователем, а также имеет доступ к переменным окружения и оболочки. Для выполнения скрипта запускается отдельный экземпляр Bash – подпроцессор.
Скрипт, выполняемый внутри подпроцессора, должен иметь доступ к переменным окружения. Поэтому основная оболочка инициализирует его, передавая свои глобальные переменные. Нужно учитывать, что переменные окружения подпроцессора и основного экземпляра Bash, работающего в терминале, не связаны между собой. Подпроцессор может менять значения глобальных переменных, но эти изменения не затронут аналогичные переменные, существующие в других подпроцессорах
Linux всё же имеет механизмы запуска подпроцессов в окружении основного командного интерпретатора Bash. Для этого перед именем вызываемого скрипта нужно поставить точку и пробел. Скрипт, запущенный таким образом сможет изменять настоящие переменные окружения.
Переменные, создаваемые оболочкой
Перед запуском нового процесса или во время выполнения текущего, командный интерпретатор Bash создает ряд переменных, которые доступны только для чтения. Их значения невозможно переопределить, так как они имеют административную направленность.