export
是幹什麼的? php
之間有什麼區別? shell
export name=value
和 bash
name=value
export
將使該變量可用於從當前shell派生的全部shell。 spa
export
使變量可用於子流程。 code
那是, 繼承
export name=value
表示變量名稱可用於您從該Shell進程運行的任何進程。 若是您但願進程使用此變量,請使用export
,而後從該Shell運行該進程。 進程
name=value
表示變量做用域僅限於外殼程序,不適用於任何其餘進程。 您能夠將其用於(例如)循環變量,臨時變量等。 ip
重要的是要注意,導出變量不會使其對父進程可用。 也就是說,在生成的進程中指定和導出變量不會使其在啓動它的進程中可用。 作用域
爲了說明其餘答案在說什麼: get
$ foo="Hello, World" $ echo $foo Hello, World $ bar="Goodbye" $ export foo $ bash bash-3.2$ echo $foo Hello, World bash-3.2$ echo $bar bash-3.2$
其餘人回答說,導出使變量可用於子外殼,這是正確的,但僅是反作用。 導出變量時,它將變量放入當前外殼程序的環境中(即外殼程序調用putenv(3)或setenv(3))。 進程的環境跨exec繼承,從而使該變量在子Shell中可見。
編輯(從5年的角度來看):這是一個愚蠢的答案。 「導出」的目的是使變量「處於隨後執行的命令的環境中」,不管這些命令是子shell仍是子進程。 天真的實現是將變量簡單地放在shell的環境中,但這將使實現export -p
成爲不可能。
這是另外一個例子:
VARTEST="value of VARTEST" #export VARTEST="value of VARTEST" sudo env | grep -i vartest sudo echo ${SUDO_USER} ${SUDO_UID}:${SUDO_GID} "${VARTEST}" sudo bash -c 'echo ${SUDO_USER} ${SUDO_UID}:${SUDO_GID} "${VARTEST}"'
只有經過使用export VARTEST才能在sudo bash -c'...'中得到VARTEST的值!
有關更多示例,請參見:
bash-hackers.org/wiki/doku.php/scripting/processtree