在 Shell 腳本中常見 LC_ALL=C 前綴(如 LC_ALL=C sar -u -b 1 5),其實是為了**移除所有本地化設定,確保命令在標準 C/POSIX 環境下正確執行**,避免因語系編碼差異導致的解析錯誤或輸出亂碼。
Linux 透過 locale 管理程式運行的語言環境,命名規則為 <語言>_<地區>.<字符集編碼>(例:zh_CN.UTF-8)。核心變數包括:
| 變數 | 用途 |
|---|---|
LC_COLLATE | 排序與比較規則 |
LC_CTYPE | 字符分類、編碼、單/多字節處理(最重要) |
LC_MONETARY | 貨幣格式 |
LC_NUMERIC | 非貨幣數字顯示格式 |
LC_TIME | 時間日期格式 |
LC_MESSAGES | 提示訊息語言 |
LANG | 所有 LC_* 的預設值(最低優先級) |
LC_ALL | **宏變數**,若設定則**覆蓋所有 LC_***,但不影響 LANG |
C 或 POSIX 是系統預設的最小環境,新安裝系統通常預設為此。
locale
locale -a
# sh/ksh/bash
export LANG=C
export LC_ALL=C
# csh/tcsh
setenv LANG C
setenv LC_ALL C
編輯 $HOME/.profile 或 $HOME/.cshrc 加入上述 export/setenv 指令。
編輯 /etc/default/init(Solaris/部分 Linux):
LANG=C
LC_ALL=C
修改後需**重啟系統**生效。
執行 locale 確認所有 LC_* 均顯示 C 或 "C",即表示已成功切換至標準環境,可消除因語系不匹配導致的 locale::facet::_S_create_c_localename not valid 等錯誤。