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

相关内容