區域性變數 全域性變數小小記錄

2021-09-26 07:56:01 字數 1823 閱讀 3960

設定了區域性環境變數後,就能在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 一般程式把新產生的動態資料存放在堆區,函式內部的自動變數存放在棧區。自動變數一般會隨著函式的退出而釋放空間,靜態資料 即使是函式內部的靜態區域性變數 也存放在全域性資料區。...