LANG=C 和 LC_ALL=C 有什麼差別?

LANG=C 和 LC_ALL=C 有什麼差別?

我喜歡停用 shell 腳本中所有區域設定特定的差異。首選的方法是?

LANG=C或者LC_ALL=C

答案1

LANG設定預設區域設置,IE未提供更多具體設定( 、LC_COLLATE等)時所使用的區域設定;它不會覆蓋任何設置,它提供基值。另一方面覆蓋所有區域設定。LC_NUMERICLC_TIMELC_ALL

因此,要覆蓋腳本的設置,您應該設置LC_ALL.

您可以透過運行來檢查設定的效果locale。它顯示了計算出的未明確設定的所有語言環境類別的值(以引號引起來);在您的範例中,LANG不是覆蓋LC_NUMERIC,而是提供預設值。如果環境中未設定LC_ALLLC_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

相關內容