環境變數是 Shell 與進程溝通的共享字典。本文深入剖析 Bash 初始化讀取順序、/etc/profile 與 ~/.profile 角色分工、PATH 搜尋機制、PS1/PS2 提示符客製化、終端機類型設定,並附贈常用變數速查表。
bash -l):/etc/profile → /etc/profile.d/*.sh → ~/.bash_profile | ~/.bash_login | ~/.profile (擇一) → ~/.bashrc (若被 source)bash):~/.bashrc → /etc/bashrc (若被 source)最佳實踐:~/.bash_profile 內 [[ -f ~/.bashrc ]] && source ~/.bashrc,統一配置入口。
# 當前 Shell 本地
VAR=value
# 匯出為環境變數 (子進程可見)
export VAR=value
# 單指令生效
VAR=value command
# 移除
unset VAR
PATH=/bin:/usr/bin:/usr/local/bin:/home/user/bin
# 多路徑以冒號分隔,優先序由左至右
# which 指令 可驗證實際執行檔位置
找不到指令 → command not found。安全建議:. (當前目錄) **勿加入** PATH。
PS1='=> '
# 顯示用戶@主機:完整路徑$
PS1='[\u@\h \w]\$ '
# 顯示時間、歷史命令號
PS1='\t \# \w\$ '
| 序列 | 顯示內容 |
|---|---|
\t | 時間 HH:MM:SS |
\d | 日期 Weekday Month Date |
\n | 換行 |
\W | 當前目錄名 (basename) |
\w | 完整路徑 |
\u | 使用者名 |
\h | 主機名 (短) |
\# | 歷史命令號 |
\$ | root 顯示 #,其他 $ |
# 預設 >
PS2='continue-> '
# 輸入未完整指令時顯示
$ echo "hello
continue-> world"
hello world
TERM=vt100 # 通用虛擬終端標準
TERM=xterm # X 終端機
TERM=xterm-256color # 256 色支援
# 由 getty/login 自動設定,通常無需手動修改
| 變數 | 用途 | 典型值 |
|---|---|---|
DISPLAY | X 圖形顯示目標 | :0 |
HOME | 使用者家目錄 | /home/user |
IFS | 內部欄位分隔符 | 空白、Tab、換行 |
LANG | 語系 | zh_TW.UTF-8 |
PATH | 指令搜尋路徑 | /usr/local/bin:... |
PWD | 當前工作目錄 | /home/user/project |
RANDOM | 0-32767 隨機數 | echo $RANDOM |
TERM | 終端機類型 | xterm-256color |
TZ | 時區 | Asia/Taipei |
UID | 使用者 ID (數字) | 1000 |
env | grep -E 'PATH|HOME|LANG|TERM'
echo $PS1
set | grep ^VAR= # 查找本地變數
環境變數雖無形,卻掌控進程行為。掌握初始化順序、PATH 優先級、PS1 客製化,終端機體驗與腳本穩定性雙提升。