“区域设置”程序如何工作?

“区域设置”程序如何工作?

locale程序将打印启动它的进程的区域设置变量,这是locale从 shell 启动时的示例输出:

LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

从哪里locale获取这些信息(我知道这些信息不是locale从 shell 继承的环境变量,因为 shell 只有 4 个 locale 环境变量)?

答案1

它通过根据相应环境变量的值了解如何处理区域设置来获取它。

以GNU版本为例,它的开头是呼叫setlocale (LC_ALL, "")设置当前区域设置。然后它会经历所有语言环境类别,依次打印每个值,但LANG(首先打印)和LC_ALL(最后打印)有特殊例外。这些值是通过查看环境值并遵循适用于区域设置的规则来确定的:

  • 如果LC_ALL设置了,则所有类别取对应的值;
  • 如果某个类别在环境中没有设置值,则LANG如果有的话,则采用“POSIX”的值,否则采用“POSIX”,并且该值包含在双引号

答案2

locale程序根据环境变量打印其结果。

您列出的输出包含可能特定于 Linux 的非标准区域设置。

为了了解其工作原理,了解以下内容可能很重要:

  • LC_ALL 覆盖环境中所有其他显式 LC_* 变量。

  • 如果特定的 LC_XXX 变量不在环境中,则 LANG 用作后备。

相关内容