在bash shell中,環境變數分為兩類:全域性變數、區域性變數。
全域性環境變數對於shell會話和所有生成的子shell都是可見的。區域性變數只對建立他們的shell可見。
檢視全域性變數,使用env或printenv命令。如果要檢視某個環境變數的值,可以使用printenv命令,但是不可以使用env命令。
[root@localhost ~]# printenv home
/root
[root@localhost ~]#
第二種檢視方法是echo命令。但是檢視的變數前需要加上$美元符號。
[root@localhost ~]# echo $home
/root
[root@localhost ~]#
區域性環境變數只有在定義他們的程序中可見。linux系統預設定義了標準的區域性環境變數。如果自定義區域性變數,那麼這些變數被稱為使用者定義區域性變數。
linux中沒有特定的命令檢視區域性環境變數。set命令會顯示某個特定程序設定的所有環境變數,包括區域性變數、全域性變數、使用者自定義變數。
[root@localhost ~]# set
所有的環境變數名均使用大寫字母,這是bash shell的標準慣例。如果是你自己建立的區域性變數或是shell指令碼,請使用小寫字母。變數名區分大小寫。在涉及使用者定義的區域性變數時堅持使用小寫字母,這能夠避免重新定義系統環境變數可能帶來的災難。
定義區域性變數
一旦啟動了bash shell(或者執行乙個shell指令碼),就能建立在這個shell程序內可見的區域性變數了。可以通過等號給環境變數賦值,值可以是數值或字串。
設定了區域性環境變數後,就能在shell程序的任何地方使用它了。但是,如果生成了另外乙個shell,它在子shell中就不可用。
[root@localhost tmp]# echo $my_var 由於沒有my_var變數,列印空行
[root@localhost tmp]# my_var="hello" 設定my_var變數的值為hello,如果值沒有空格,可以省略雙引號
[root@localhost tmp]# echo $my_var 使用my_var變數,需要加上$作為引用,列印出來值
hello
[root@localhost tmp]#
定義全域性變數
在設定全域性環境變數的程序所建立的子程序中,該變數都是可見的。建立全域性環境變數的方法是先建立乙個區域性環境變數,然後再把它匯出到全域性環境中。這個過程通過 export 命令來完成,變數名前面不需要加 $ 。
[root@localhost tmp]# echo $my_var 由於沒有my_var變數,列印空行
[root@localhost tmp]# my_var="hello" 設定my_var變數的值為hello,如果值沒有空格,可以省略雙引號
[root@localhost tmp]# echo $my_var 使用my_var變數,需要加上$作為引用,列印出來值
hello
[root@localhost tmp]# export my_var 將區域性變數匯入到全域性變數中
[root@localhost tmp]# echo $my_var 列印該變數
hello
[root@localhost tmp]# bash 重新開啟乙個bash shell程序,測試是否可以訪問變數my_var
[root@localhost tmp]# echo $my_var 新的程序依舊可以訪問變數
hello
[root@localhost tmp]# exit 退出當前程序,返回上乙個程序
exit
[root@localhost tmp]# echo $my_var 原本的程序有也可以訪問。
hello
[root@localhost tmp]# printenv 列印全域性變數
# 其他全域性變數省略不顯示
my_var=hello world 剛才匯入的全域性變數已經顯示
_=/usr/bin/printenv
[root@localhost tmp]#
修改子shell中全域性環境變數並不會影響到父shell中該變數的值。
[root@localhost tmp]# echo $my_var 父shell的全域性變數值
hello world
[root@localhost tmp]# bash 開啟乙個子shell
[root@localhost tmp]# echo $my_var 列印子shell的變數值
hello world
[root@localhost tmp]# my_var="bash hello world" 重新設定子shell的變數值
[root@localhost tmp]# echo $my_var 重新列印子shell變數
bash hello world
[root@localhost tmp]# exit 退出子shell程序
exit
[root@localhost tmp]# echo $my_var 重新列印父shell程序
hello world
[root@localhost tmp]#
子shell甚至無法使用 export 命令改變父shell中全域性環境變數的值。儘管子shell重新定義並匯出了變數 my_variable ,但父shell中的 my_variable 變數依然保留著原先的值。所以linux中,子shell是無法操作父shell的環境變數。
當然,既然可以建立新的環境變數,自然也能刪除已經存在的環境變數。可以用 unset 命令完成這個操作。在 unset 命令中引用環境變數時,記住不要使用 $ 。
[root@localhost tmp]# echo $my_var 列印環境變數
hello world
[root@localhost tmp]# unset my_var 刪除my_var環境變數
[root@localhost tmp]# echo $my_var
[root@localhost tmp]#
在涉及環境變數名時,什麼時候該使用 $ ,什麼時候不該使用 $ ,實在讓人摸不著頭腦。
記住一點就行了:如果要用到變數,使用 $ ;如果要操作變數,不使用 $ 。這條規則的一
個例外就是使用 printenv 顯示某個變數的值。
在處理全域性環境變數時,事情就有點棘手了。如果你是在子程序中刪除了乙個全域性環境變數,
這只對子程序有效。該全域性環境變數在父程序中依然可用。所以,要刪除某個環境變數,需要父程序處理才可以。
遇到修改系統環境變數的問題。如果乙個變數已經很長,如果重新設定難免會出錯,所以linux提供了擴充套件的方法去修改變數。
[root@localhost tmp]# my_var="hello" 設定環境變數
[root@localhost tmp]# echo $my_var
hello
[root@localhost tmp]# my_var=$my_var" world" 環境變數擴充套件,新增world
[root@localhost tmp]# echo $my_var 重新列印
hello world
[root@localhost tmp]#
Linux環境變數查詢與設定
1 查詢 1.1 env 可以使用env命令查詢當前系統所有的環境變數 env1.2 set 使用set命令顯示所有本地定義的shell變數 5 2 設定 2.1 bashrc 2.1.1 使用範圍 ubuntu 2.1.2 新增方法 開啟上述檔案,然後在檔案尾部新增環境變數設定即可,例如 path...
Linux環境變數設定
1 直接用export命令 export path path 自定義路徑 檢視是否已經設好,可用命令export檢視 root localhost bin export path path 自定義路徑 2 修改profile檔案 vi etc profile 在裡面加入 export path pa...
Linux環境變數設定
linux環境變數設定 linux環境變數設定 1 引言 在 linux系統 command not found 的提示內容。如果每次都到安裝目標資料夾內,找到可執行檔案來進行操作就太繁瑣了。這涉及到環境變數 path 的設定問題,而 path 的設定也是在 linux 下定製環境變數的乙個組成部分...