每一種編程語言中,我們都會碰到變量的作用域的問題。(比如在函數中定義的變量在函數外不能使用的)
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
用於清除變量。不管這個變量是環境變量還是本地變量,它都可以清除。