重要概念
起源
Linux 中嘅環境變量源自早期 UNIX 系統嘅設計需求。 通過環境變量,用戶同進程能夠動態咁影響系統行為,而唔需要修改系統嘅核心代碼。 呢種靈活性同可配置性使環境變量成為 Linux 系統同應用程序配置嘅關鍵部分。
喺 UNIX 中,每個進程都有自己嘅環境(即一組環境變量),呢啲環境變量喺進程嘅啟動時由父進程傳遞畀子進程。 最典型嘅例子係當用戶登錄系統時,系統啟動嘅 Shell 進程會繼承一組默認嘅環境變量,例如用戶嘅主目錄、Shell 類型等。 用戶可以喺呢個基礎上修改或添加環境變量,影響自己啟動嘅程序或進程嘅行為。
概念勘誤
有啲書籍同文章會把環境變量分為全局環境變量同局部環境變量,但呢種分類係唔準確嘅,
因為喺官方嘅文檔中,從來冇呢兩種分類嘅定義,甚至連英文名稱都冇。
因此,為咗避免語義上嘅邏輯問題,本文唔會對環境變量進行上述嘅分類。
《Linux 命令行與Shell 腳本編程大全》
《Linux Command Line and Shell Scripting Bible》
上面呢本書關於環境變量嘅章節係有問題嘅,唔係翻譯嘅問題,原版就有問題。
打印環境變量
命令:printenv
唔帶參數會打印所有環境變量。
打印指定環境變量。
命令:env
唔帶參數會打印所有環境變量。
命令:echo
打印指定變量,可以係環境變量或 Shell 變量。
自定義 Shell 變量
定義名為 soda 嘅 Shell 變量,值為 green。
使用 printenv 訪問
輸出為空,因為 soda 唔係環境變量,佢只係一個 Shell 變量。
使用命令分組 () 訪問
使用命令分組 () 修改
Subshell 內部嘅修改唔會影響外部嘅數據。
創建 Bash 實例訪問
輸出為空,呢就係普通 Shell 變量嘅基本作用域。
自定義環境變量
可以通過 export
指令把 Shell 變量轉變為環境變量,官方手冊嘅定義如下。
可以同時定義和導出變量,或分開操作。
使用 printenv 訪問
轉變為環境變量之後,使用 printenv 就能正常打印了。
使用命令分組 () 訪問
使用命令分組 () 修改
同樣,內部修改環境變量是唔會影響外部嘅數據。
創建 Bash 實例訪問
環境變量喺新創建嘅 Bash 實例中係能訪問嘅。
查看所有 export 變量
唔帶參數,或使用 -p
就能打印所有 export 變量。
取消 export 環境變量
使用 -n
選項就能取消 export,變回普通嘅 Shell 變量。
printenv 無輸出,echo 正常輸出,因為 soda 已經唔再係環境變量。
刪除變量
下面會刪除整個變量,無論係環境變量或 Shell 變量。
命令:declare
用於聲明變量和屬性,唔帶任何參數就輸出所有嘅變量聲明和當前值。
常用參數:
-i
:將變量聲明為整數。-r
:將變量聲明為只讀。-x
:將變量導出為環境變量。-p
:顯示變量嘅聲明和當前值。
不帶參數聲明
效果和普通嘅 Shell 變量一樣。
顯示當前變量嘅聲明
顯示所有變量嘅聲明
聲明環境變量
喺 export
中亦能睇到 soda 嘅定義。
-x 與 -- 嘅區別
不難發現,可以通過聲明嘅符號區分不同嘅變量類型。
-x
:環境變量嘅聲明。--
:普通 Shell 變量嘅聲明。
取消 export 後。
內建命令手冊
有啲內建命令使用 man
係無法查看手冊嘅,但可以使用 help
命令,或 --help
選項。
export
declare
同上
unset
同上