Возможный дубликат:
разница между «a = b» и «export a = b» в bash
Трудно признать, но я никогда не понимал, что именно export
делает переменную окружения. Я знаю, что если я не экспортирую переменную, я иногда не вижу ее в дочерних процессах, но иногда кажется, что могу. Что на самом деле происходит, когда я говорю
export foo=5
и когда я не должен экспортировать переменную?
bash
export
shell-script
Чес. Owens
источник
источник
export
операторов в .bashrc / .bash_profile для создания постоянных глобальных переменных, аналогичных$HOME
.Ответы:
От
man bash
:источник
Экспортируемые переменные передаются дочерним процессам, а неэкспортированные переменные - нет.
источник
PYTHONPATH
), а затем заметив, что, хотя вы можетеecho $PYTHONPATH
это сделать, он не распознается скриптами python или bash, пока выexport
не сделаете это$BASHPID
), и все же вы можете читать неэкспортированные переменные из родительской оболочки. Простое доказательство:x="y"; echo "$BASHPID: $x"; (echo "$BASHPID: $x")
я предполагаю, что это особый случай, когда дочерний процесс является вложенной оболочкой.При использовании
export
вы добавляете переменную в список переменных среды оболочки, в которой была вызвана команда экспорта, и все переменные среды оболочки передаются дочерним процессам, поэтому вы можете использовать ее.Когда вы завершаете работу оболочки, ее среда уничтожается, поэтому переменные среды объявляются и экспортируются при входе в систему, например, в файле .bashrc.
источник