68

Возможный дубликат:
Разница между «a = b» и «export a = b» в bash

Трудно признать, но я никогда не понимал, что именно export делает для переменной среды. Я знаю, что если я не экспортирую переменную, я иногда не вижу ее в дочерних процессах, но иногда мне кажется, что я могу. Что на самом деле происходит, когда я говорю

export foo=5

и когда я не должен экспортировать переменную?

3 ответа3

90

Экспортируемые переменные передаются дочерним процессам, а неэкспортированные переменные - нет.

19

При использовании export вы добавляете переменную в список переменных среды оболочки, в которой была вызвана команда экспорта, и все переменные среды оболочки передаются дочерним процессам, поэтому вы можете использовать ее.

Когда вы завершаете работу оболочки, ее среда уничтожается, поэтому переменные среды объявляются и экспортируются при входе в систему, например, в файле .bashrc.

15

От man bash:

СРЕДА

Когда программа вызывается, ей присваивается массив строк, называемый окружением. Это список пар имя-значение в формате имя = значение.

Оболочка предоставляет несколько способов манипулирования средой. При вызове оболочка сканирует свою собственную среду и создает параметр для каждого найденного имени, автоматически помечая его для экспорта в дочерние процессы. Выполненные команды наследуют среду. Команды export и declare -x позволяют добавлять и удалять параметры и функции из среды. Если значение параметра в среде изменяется, новое значение становится частью среды, заменяя старое. Среда, унаследованная любой исполняемой командой, состоит из начальной среды оболочки, значения которой могут быть изменены в оболочке, за исключением любых пар, удаленных командой unset , а также любых дополнений с помощью команд export и declare -x .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .