環境變數與 Shell 緊密相關。使用者登入系統後會啟動一個 Shell(通常是 bash),環境變數透過 Shell 指令設定,經 export 導出後,可被該使用者啟動的所有程式繼承使用。
$ echo $HOME
/home/terry
$ export WELCOME="Hello!"
$ echo $WELCOME
Hello!
$ env
HOSTNAME=terry.mykms.org
SHELL=/bin/bash
TERM=xterm
HISTSIZE=1000
...
$ set
BASH=/bin/bash
BASH_VERSION='2.05b.0(1)-release'
COLUMNS=80
...
$ export TEST="Test..."
$ env | grep TEST
TEST=Test...
$ unset TEST
$ env | grep TEST # 無輸出,表示已移除
$ export TEST="Test..."
$ readonly TEST
$ unset TEST
-bash: unset: TEST: cannot unset: readonly variable
$ TEST="New"
-bash: TEST: readonly variable
| Shell | 設定 | 追加 | 移除 | 顯示 | 備註 |
|---|---|---|---|---|---|
| sh | NAME=value1 | NAME=value2:$NAME | unset NAME | set 或 env | 需 export 讓子行程繼承 |
| ksh | NAME=value1 | NAME=value2:$NAME | unset NAME | set 或 env | 需 export |
| csh | setenv NAME value1 | setenv NAME value2:$NAME | unsetenv NAME | set | 不需 export |
| bash | NAME=value1 | NAME=value2:$NAME | unset NAME | set 或 env | 需 export 讓子行程繼承 |
/etc/profile:對整個系統生效,登入 Shell 載入。~/.bash_profile、~/.bash_login、~/.profile:使用者個人登入設定,依序嘗試讀取。~/.bashrc:互動式非登入 Shell 載入(如開啟終端機視窗)。~/.bash_logout:登出時執行,例如 clear 自動清螢幕。在 /etc/profile 或 ~/.bash_profile 加入:
export LANG=zh_CN.GBK
export LC_ALL=zh_CN.GBK
export XMODIFIERS=@im=Chinput
csh/tcsh 寫法:
setenv LANG zh_CN.GBK
setenv LC_ALL zh_CN.GBK
setenv XMODIFIERS @im=Chinput
export 導出後才會傳遞給子行程。source 對應檔案生效。