Shell

shell 分配正常變數的位置是什麼?

  • February 7, 2016

如您所知,bash shell 本身也是程序。

如果我使用 command export a=c,那麼 shell 會動態地將變數分配a到環境變數所在的位置。(這個環境部分在程序的記憶體描述符中描述)所以,我認為變數a被分配到環境部分。此外,它可以從命令中檢索printenv

但是,當我使用 command b=f,然後 useecho $b時,就會進行變數擴展。所以結果是f。這個變數從何而來?

如果我使用 command echo $a,那麼我可以理解 shell 從環境變數部分載入這個變數。

但是如果我使用 command echo $b,shell 在哪裡載入這個變數?它是程序的堆部分還是某個地方?

所有 shell 變數都存在於同一個儲存中。

啟動時,會導入所有環境變數。

啟動新命令時,如果為此新命令創建新環境。所有標記為導出或已從原始環境導入的變數都被放入這個新環境特定於新命令的環境中。

如果您分配一個不影響正在執行的 shell 環境的值(我不知道這是否可能)。

shell 使用內部儲存器儲存它的所有變數(至少對於寫入的變數)。你可以很容易地看到:

env - TESTVAR=foo bash

echo $TESTVAR 
foo

TESTVAR=bar

echo $TESTVAR 
bar

echo $$
13833

cat /proc/13833/environ
TESTVAR=foo

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