Linux環境變數和本地變數

2022-09-23 04:52:08 字數 1725 閱讀 5506

每一種程式語言中,我們都會碰到變數的作用域的問題。(比如在函式中定義的變數在函式外不能使用的) 

bash 中也有類似的問題,區域性變數和環境變數(全域性變數)。 

區域性變數是普通的變數,僅在建立它的shell中有效。 

環境變數。我們更多的使用“環境變數”而不是“全域性變數”,因為這個名稱更 

能體現它的特點。環境變數對建立它的shell及其派生出來的子程序都有效。或者說環境變數可以繼承,但它對其它與建立它的shell沒有關係的shell並不可見。其實重啟一個終端就是重新啟動了一個shell 

linux的變數可分為兩類:環境變數和本地變數 

環境變數,或者稱為全域性變數,存在與所有的shell中,在你登陸系統的時候就已經有了相應的系統定義的環境變數了。linux的環境變數具有繼承性,即子shell會繼承父shell的環境變數。 

#env 顯示環境變數 

本地變數,當前shell中的變數,很顯然本地變數中肯定包含環境變數。linux的本地變數的非環境變數不具備繼承性。 

#set顯示本地變數 

linux中環境變數的檔案 

當你進入系統的時候,linux就會為你讀入系統的環境變數,這些環境變數存放在什麼地方,那就是環境變數的檔案中。linux中有很多記載環境變數的檔案,它們被系統讀入是按照一定的順序的。 

1.    /etc/profile: 

此檔案為系統的環境變數,它為每個使用者設定環境資訊,當使用者第一次登入時,該檔案被執行。並從/etc/profile.d目錄的配置檔案中搜集shell的設定。 

這個檔案,是任何使用者登陸作業系統以後都會讀取的檔案(如果使用者的shell是csh、tcsh、zsh,則不會讀取此檔案),用於獲取系統的環境變數,只在登陸的時候讀取一次。 

假設使用者使用的是bash,那麼 

2.    /etc/bashrc: 

在執行完/etc/profile內容之後,如果使用者的shell執行的是bash,那麼接著就會執行此檔案。另外,當每次一個新的bash shell被開啟時,該檔案被讀取。 

每個使用bash的使用者在登陸以後執行完/etc/profile中內容以後都會執行此檔案,在新開一個bash的時候也會執行此檔案。因此,如果你想讓每個使用bash的使用者每新開一個bash和每次登陸都執行某些操作,或者給他們定義一些新的環境變數,就可以在這個裡面設定。 

3.    ~/.bash_profile: 

每個使用者都可使用該檔案輸入專用於自己使用的shell資訊。當使用者登入時,該檔案僅僅執行一次,預設情況下,它設定一些環境變數,執行使用者的.bashrc檔案。 

單個使用者此檔案的修改只會影響到他以後的每一次登陸系統。因此,可以在這裡設定單個使用者的特殊的環境變數或者特殊的操作,那麼它在每次登陸的時候都會去獲取這些新的環境變數或者做某些特殊的操作,但是僅僅在登陸時。 

4.    ~/.bashrc: 

該檔案包含專用於單個人的bash shell的bash資訊,當登入時以及每次開啟一個新的shell時,該該檔案被讀取。 

單個使用者此檔案的修改會影響到他以後的每一次登陸系統和每一次新開一個bash。因此,可以在這裡設定單個使用者的特殊的環境變數或者特殊的操作,那麼每次它新登陸系統或者新開一個bash,都會去獲取相應的特殊的環境變數和特殊操作。 

~/.bash_logout: 

當每次退出系統(退出bash shell)時,執行該檔案。 

幾個命令 

env和printenv 

unset 

用於清除變數。不管這個變數是環境變數還是本地變數,它都可以清除。