Linux
Bash - 外殼與環境變數
我想澄清一下我在 shell 變數與環境變數中的混淆。我進行了以下測試,其中我有一個 shell 變數
abc
,export
它是一個環境變數。$ $ 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
是一個外部命令。因此,它只能報告已導出的變數。“為命令導出的變數”的含義
正常的變數賦值具有持久性:變數存在直到它被刪除(取消設置)。也可以創建臨時變數以供特定命令使用。
例如,讓我們創建一個
a
供env
命令使用的變數:$ a=b env | grep ^a= a=b