設定了區域性環境變數後,就能在shell程序的任何地方使用它了。但是,如果生成了另外乙個
shell,它在子shell中就不可用。
$ my_variable="hello world"
$$ bash
$$ echo $my_variable
$ exit
exit
$$ echo $my_variable
hello world
在這個例子中生成了乙個子shell。在子shell中無法使用使用者定義變數my_variable。通過命
令echo $my_variable所返回的空行就能夠證明這一點。當你退出子shell並回到原來的shell時,
這個區域性環境變數依然可用。
類似地,如果你在子程序中設定了乙個區域性變數,那麼一旦你退出了子程序,那個區域性環境
變數就不可用。
$ echo $my_child_variable
$ bash
$$ my_child_variable="hello little world"
$$ echo $my_child_variable
hello little world
$$ exit
exit
$$ echo $my_child_variable$當
在設定全域性環境變數的程序所建立的子程序中,該變數都是可見的。建立全域性環境變數的方
108 第6 章 使用linux 環境變數
法是先建立乙個區域性環境變數,然後再把它匯出到全域性環境中。
這個過程通過export命令來完成,變數名前面不需要加$。
在涉及環境變數名時,什麼時候該使用$,什麼時候不該使用$,實在讓人摸不著頭腦。
記住一點就行了:如果要用到變數,使用$;如果要操作變數,不使用$。這條規則的一
個例外就是使用printenv顯示某個變數的值。
在處理全域性環境變數時,事情就有點棘手了。如果你是在子程序中刪除了乙個全域性環境變數,
這只對子程序有效。該全域性環境變數在父程序中依然可用。
$ my_variable="i am global now"
$$ export my_variable
$$ echo $my_variable
i am global now
$$ bash
$$ echo $my_variable
i am global now
$$ unset my_variable
$$ echo $my_variable
$ exit
exit
$$ echo $my_variable
i am global now
$和修改變數一樣,在子shell中刪除全域性變數後,你無法將效果反映到父shell中。
你可能已經注意到,不是所有的預設環境變數都會在執行set命令時列出。儘管這些都是默
認環境變數,但並不是每乙個都必須有乙個值。
登入shell
當你登入linux系統時,bash shell會作為登入shell啟動。登入shell會從5個不同的啟動檔案裡
讀取命令:
/etc/profile
$home/.bash_profile
$home/.bashrc
$home/.bash_login
$home/.profile
/etc/profile檔案是系統上預設的bash shell的主啟動檔案。系統上的每個使用者登入時都會執行
這個啟動檔案
全域性變數 靜態全域性變數 靜態區域性變數 區域性變數
全域性和靜態變數都在堆裡。這句話應該錯了,應該是放在常量資料段 全域性變數的作用範圍是整個程式 如果程式是多個檔案,必須在其他的檔案中說明 靜態變數的作用範圍要看靜態變數的位置,如果在函式裡,則作用範圍 就是這個函式。靜態全域性變數,只在本檔案可以用,雖然整個程式包含多個檔案,但靜態全域性變數只能用...
全域性變數 靜態全域性變數 靜態區域性變數 區域性變數
全域性和靜態變數都在堆裡。全域性變數的作用範圍是整個程式 如果程式是多個檔案,必須在其他的檔案中說明 靜態變數的作用範圍要看靜態變數的位置,如果在函式裡,則作用範圍 就是這個函式。靜態全域性變數,只在本檔案可以用,雖然整個程式包含多個檔案,但靜態全域性變數只能用在定義它的那個檔案裡,卻不能用在程式中...
全域性變數 靜態全域性變數區域性變數 靜態區域性變數
對於乙個完整的程式,在記憶體中的分布情況如下圖 區 low address 全域性資料區 堆區 棧區 high address 一般程式把新產生的動態資料存放在堆區,函式內部的自動變數存放在棧區。自動變數一般會隨著函式的退出而釋放空間,靜態資料 即使是函式內部的靜態區域性變數 也存放在全域性資料區。...