Експортовані змінні переносяться в оточення команд, виконаних оболонкою, яка експортувала їх, тоді як неекспортовані змінні є локальними для поточного виклику оболонки. На export
чоловіковій сторінці:
Оболонка повинна надавати атрибут експорту змінним, що відповідають вказаним іменам, що спричиняє їх перебування в середовищі згодом виконаних команд.
set
виводить поточне середовище, що включає будь-які локальні неекспортовані змінні. env
використовується для запуску програм у новому середовищі, і без жодних аргументів виводиться те, яким було б це нове середовище. Оскільки env
створюється нове середовище, через експортуються лише змінні, що експортуються, як це стосується будь-якої програми, запущеної з цієї оболонки. Наприклад, нерест другої оболонки в першій (я $$
представляв підказки у внутрішній оболонці):
$ FOO=BAR
$ bash
$$ echo $FOO # Note the empty line
$$ exit
$ export FOO
$ bash
$$ echo $FOO
BAR
$$
Зауважте, що експортується змінна, а не лише її значення. Це означає , що як тільки ви export FOO
, FOO
стає глобальною змінною і відображається в наступних умовах, навіть якщо змінити пізніше:
$ export FOO
$ FOO=BAR
$ bash
$$ echo $FOO
BAR
$$