定義帶或不帶導出的變量

export是幹什麼的? php

之間有什麼區別? shell

export name=value

bash

name=value

#1樓

export將使該變量可用於從當前shell派生的全部shell。 spa


#2樓

export使變量可用於子流程。 code

那是, 繼承

export name=value

表示變量名稱可用於您從該Shell進程運行的任何進程。 若是您但願進程使用此變量,請使用export ,而後從該Shell運行該進程。 進程

name=value

表示變量做用域僅限於外殼程序,不適用於任何其餘進程。 您能夠將其用於(例如)循環變量,臨時變量等。 ip

重要的是要注意,導出變量不會使其對父進程可用。 也就是說,在生成的進程中指定和導出變量不會使其在啓動它的進程中可用。 作用域


#3樓

爲了說明其餘答案在說什麼: 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$

#4樓

其餘人回答說,導出使變量可用於子外殼,這是正確的,但僅是反作用。 導出變量時,它將變量放入當前外殼程序的環境中(即外殼程序調用putenv(3)或setenv(3))。 進程的環境跨exec繼承,從而使該變量在子Shell中可見。

編輯(從5年的角度來看):這是一個愚蠢的答案。 「導出」的目的是使變量「處於隨後執行的命令的環境中」,不管這些命令是子shell仍是子進程。 天真的實現是將變量簡單地放在shell的環境中,但這將使實現export -p成爲不可能。


#5樓

這是另外一個例子:

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的值!

有關更多示例,請參見:

相關文章
相關標籤/搜索