Linux

Bash - 外殼與環境變數

  • August 13, 2015

我想澄清一下我在 shell 變數與環境變數中的混淆。我進行了以下測試,其中我有一個 shell 變數abcexport它是一個環境變數。

$ 
$ abc="shell var"
$ env | grep abc
$ echo $abc
shell var
$ export abc="env var"
$ env | grep abc
abc=env var
$ echo $abc
env var
$ unset abc
$ env | grep abc
$ echo $abc
$ 

導出完成後,我嘗試echo $abc.

問題:

  • export 是否將變數abc從 shell 移動到環境中,還是在環境中創建一個副本並為其分配一個新值?
  • 當第二個echo在之後完成時export,是否echo檢查是否abc在環境中然後列印它,或者abc已經完全從外殼中刪除並且只存在於環境中,這就是為什麼echo列印它的值?

export 是否將變數 abc 從 shell 移動到環境中,還是在環境中創建一個副本並為其分配一個新值?

兩者都不。 export只需標記要導出的變數。

當執行外部命令時,shell 會創建一個環境來傳遞給它。只有標記為導出的變數才會添加到該環境中。正如man bash解釋的那樣:

標記為導出的 shell 變數和函式,以及為命令導出的變數,

$$ are $$在環境中通過

請注意,這env是一個外部命令。因此,它只能報告已導出的變數。

“為命令導出的變數”的含義

正常的變數賦值具有持久性:變數存在直到它被刪除(取消設置)。也可以創建臨時變數以供特定命令使用。

例如,讓我們創建一個aenv命令使用的變數:

$ a=b env | grep ^a=
a=b

引用自:https://unix.stackexchange.com/questions/222913