
我喜歡停用 shell 腳本中所有區域設定特定的差異。首選的方法是?
LANG=C
或者LC_ALL=C
答案1
LANG
設定預設區域設置,IE未提供更多具體設定( 、LC_COLLATE
等)時所使用的區域設定;它不會覆蓋任何設置,它提供基值。另一方面覆蓋所有區域設定。LC_NUMERIC
LC_TIME
LC_ALL
因此,要覆蓋腳本的設置,您應該設置LC_ALL
.
您可以透過運行來檢查設定的效果locale
。它顯示了計算出的未明確設定的所有語言環境類別的值(以引號引起來);在您的範例中,LANG
不是覆蓋LC_NUMERIC
,而是提供預設值。如果環境中未設定LC_ALL
和LC_NUMERIC
,則區域設定取自LANG
,並locale
顯示 的值LC_NUMERIC
,如引號所示。
看線上說明locales
頁和環境變數的 POSIX 定義了解詳情。也可以看看“區域設定”程序如何運作?
答案2
LANG
不覆蓋:
$ 導出 LC_NUMERIC="de_DE.UTF-8" $ 導出 LANG=C $ printf "%.2f\n" 3.14 -bash: printf: 3.14: 無效數字 3,00
但LC_ALL
確實:
$ 導出 LC_NUMERIC="de_DE.UTF-8" $ 匯出 LC_ALL=C $ printf "%.2f\n" 3.14 3.14