该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 用作后备。