LANG = CとLC_ALL = Cの違いは何ですか?

LANG = CとLC_ALL = Cの違いは何ですか?

私はシェルスクリプトですべてのロケール固有の違いを無効にしたいと思います。好ましい方法は何ですか?

LANG=CまたはLC_ALL=C

答え1

LANGデフォルトのロケールを設定し、つまり特定の設定(など)が提供されなくなったLC_COLLATEときに使用されるロケールです。これは設定をオーバーライドせず、デフォルト値を提供します。一方、すべてのロケールをオーバーライドします。LC_NUMERICLC_TIMELC_ALL

したがって、スクリプト設定を上書きするには、設定する必要がありますLC_ALL

を実行して設定の効果を確認できますlocale。これは見せる計画された例で明示的に設定されていないすべてのロケールカテゴリの値(引用符)は、オーバーライドするLANG代わりにLC_NUMERICデフォルト値が提供されます。環境にLC_ALLおよびが設定されていない場合、LC_NUMERICロケールは引用符で示されているとおりに表示されLANGlocale値から取得されます。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

関連情報