LANG=C 和 LC_ALL=C 有什么区别?

cev*_*ing 21 locale

我喜欢禁用 shell 脚本中所有特定于语言环境的差异。最好的方法是什么?

LANG=C 或者 LC_ALL=C

Ste*_*itt 28

LANG集的默认区域设置,当没有更多的特定设置(使用的语言环境LC_COLLATELC_NUMERICLC_TIME设置等); 它不会覆盖任何设置,它提供基本值。LC_ALL另一方面覆盖所有区域设置。

因此,要覆盖脚本的设置,您应该设置LC_ALL.

您可以通过运行来检查设置的效果locale。它用引号显示了所有未明确设置的语言环境类别的计算值;在您的示例中,LANG不是覆盖LC_NUMERIC,而是提供默认值。如果LC_ALLLC_NUMERIC未在环境中设置,则区域设置取自LANG,并locale显示 的值LC_NUMERIC,如引号所示。

请参见locales手册页环境变量的定义POSIX详细信息。另请参阅“语言环境”程序如何工作?


cev*_*ing 7

LANG 不覆盖:

$ export LC_NUMERIC="de_DE.UTF-8"
$出口LANG=C
$ printf "%.2f\n" 3.14
-bash: printf: 3.14: 无效数字
3,00

LC_ALL确实:

$ export LC_NUMERIC="de_DE.UTF-8"
$出口LC_ALL=C
$ printf "%.2f\n" 3.14
3.14