シェルスクリプトのロケール固有の違いをすべて無効にしたい。それを行うための好ましい方法は何ですか?
LANG=C
またはLC_ALL=C
LANG
はデフォルトのロケールを設定し、ie特定の設定がない場合に使用されるロケール(LC_COLLATE
、LC_NUMERIC
、LC_TIME
など)が提供されます。設定を上書きするのではなく、基本値を提供します。一方、LC_ALL
はすべてのロケール設定を上書きします。
したがって、スクリプトの設定を上書きするには、LC_ALL
を設定する必要があります。
locale
を実行すると、設定の効果を確認できます。明示的に設定されていないすべてのロケールカテゴリについて、計算された値が引用符で囲まれて表示されます。あなたの例では、LANG
はLC_NUMERIC
をオーバーライドしていません。デフォルト値を提供しています。 LC_ALL
およびLC_NUMERIC
が環境で設定されていない場合、ロケールはLANG
から取得され、locale
はLC_NUMERIC
のその値を示します。引用符で示されます。
詳細は the locales
manpage および 環境変数のPOSIX定義 を参照してください。参照 「ロケール」プログラムはどのように機能しますか?
LANG
はオーバーライドしません:
$ export LC_NUMERIC = "de_DE.UTF-8" $ export LANG = C $ printf "%.2f\n" 3.14 -bash:printf :3.14:無効な数値 3,00
だが LC_ALL
は:
$ export LC_NUMERIC = "de_DE.UTF-8" $ export LC_ALL = C $ printf "%.2f\n" 3.14 3.14