我喜欢禁用 shell 脚本中所有区域设置特定的差异。首选的方法是什么?
LANG=C
或者LC_ALL=C
答案1
LANG
设置默认区域设置,IE未提供更多具体设置( 、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