環境變數是 Linux 進程配置的通用語言。本文系統講解變數分類、設定層級、查看指令、子進程繼承規則,並對比 Bash 與 tcsh 語法差異。
| 類型 | 定義者 | 可修改 | 繼承性 |
|---|---|---|---|
| 內部變數 | Shell 內建 | 不可 | 不繼承 |
| 環境變數 | 系統/使用者 | 可 | ✅ 子進程繼承 |
| 本地變數 | 使用者 | 可 | ❌ 僅當前 Shell |
# 本地變數
VAR=value
# 環境變數(匯出給子進程)
export VAR=value
# 或分兩步
VAR=value
export VAR
# 單一指令生效的環境變數
VAR=value command
set VAR=value # 本地
setenv VAR=value # 環境
env VAR=value command
echo $VAR # 顯示單一變數
set # 所有本地+環境變數(Bash)
printenv # 僅環境變數
env # 同 printenv
# 父 Shell 設定本地變數
STR="Hello World"
# 子腳本嘗試讀取
./child.sh # 輸出空行(本地變數不繼承)
# 父 Shell 匯出
export STR
./child.sh # 輸出 Hello World
# 子 Shell 修改匯出變數
# child.sh 內容:STR="Modified"; echo $STR
./child.sh # 輸出 Modified
echo $STR # 父 Shell 仍為 Hello World(子進程修改不回傳)
鐵律:子進程獲得父進程環境變數的**副本**,修改隔離不互通。
export 環境變數source 或命令置換)| 變數 | 用途 |
|---|---|
PATH | 指令搜尋路徑 |
HOME | 使用者家目錄 |
SHELL | 當前 Shell 路徑 |
LANG | 語系(如 zh_TW.UTF-8) |
TERM | 終端機類型 |
PWD | 目前工作目錄 |
RANDOM | 0-32767 隨機數 |
UID | 使用者 ID |
# 系統級(所有使用者)
/etc/profile
/etc/profile.d/*.sh
# 使用者級(登入 Shell)
~/.bash_profile
~/.profile
# 使用者級(互動式非登入 Shell)
~/.bashrc
建議將 export 寫入 ~/.bashrc 並在 ~/.bash_profile 中 source ~/.bashrc,涵蓋所有場景。
環境變數是進程間無聲的契約。掌握「本地不繼承、環境可繼承、子進程隔離」三大鐵律,除錯配置問題將事半功倍。