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_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

関連情報