
シェル スクリプトでロケール固有の違いをすべて無効にしたいのですが、どのような方法が好ましいでしょうか?
LANG=C
またはLC_ALL=C
答え1
LANG
デフォルトのロケールを設定します。つまりこれ以上の特定の設定 ( 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