这里有很多关于如何设置这些变量的问题,但没有关于它们如何工作的问题。
如果我locale
在终端中输入,它会显示一堆变量:
LC_COLLATE="en_GB.UTF-8"
LC_MONETARY="en_GB.UTF-8"
然而,这些在系统上并不存在。执行 echo 返回空白字符串echo $LC_MONETARY
。
我认为该实用程序正在读取一些数据库并打印可以自定义并设置为覆盖默认值的环境变量?
- 正在读取什么数据库?可以直接编辑它而不使用这些变量来覆盖其设置吗?
- 如果设置了这些变量,则哪些系统组件会使用它们。这些是否被任何用户空间程序使用?
- 是
locale
其他实用程序附带的软件包的一部分吗? - 这些变量是否属于标准的一部分并在所有发行版中都可以找到?
任何对解释 LC_ vars 和 locale 实用程序的文档的引用将不胜感激。我发现的大多数网络文章都解释了如何使用它们,但没有解释区域设置系统的设计/架构。
答案1
这些值不是从数据库读取的。
locale
适用优先规则:如果LANG
设置了,它确定任何未设置变量的默认值LC_
,如果LC_ALL
设置了,它会覆盖所有值。例如,我已将LANG
和LC_CTYPE
显式设置为en_GB.UTF-8
,并locale
显示en_GB.UTF-8
所有值;但如果我设置LANG
为fr_FR.UTF-8
,它会显示fr_FR.UTF-8
所有值除了LC_CTYPE
。变量的读取方式是功能
setlocale
,如果程序关心语言环境,则应该调用哪些程序。locale
通常是 C 库的一部分。变量定义在POSIX,一个定义大多数 Unix 风格系统中常见接口的标准。一些系统(或者更确切地说,C 库)具有扩展;例如GNU C 库定义了许多非标准语言环境类别例如
LC_ADDRESS
。