区域环境变数设定 LC_ALL 的优先级?

我参考了GNU的官方文件中对于Locale Environment Variables章节的描述。
其中有提到 LC_ALL 的优先层级最高,因此设定该变数应该会覆盖其他如LANGUAGELANG 等的设定。
但是当我使用 export LC_ALL='C.UTF8' 命令后,再使用 locale 后却看到LANG变数仍保留原来的资料。
如下:

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

使用localectl命令也是得到未更新的结果,如下:

localectl
System Locale: LANG=en_US.UTF-8

请问 LC_ALL 这个环境变数的优先层级是否真的是最高?
谢谢

个人测试理解:LC_ALL优先级确实比LANG高,但是不覆盖LANG的值。
如:LC_ALL为空时,设置LANG也会修改其他LC_*变量的值;但是此时设置LC_ALL则会将LC_*变量的值全部更改和LC_ALL一致;相反过来操作则不会。

如果要确保系统上的语系一至,最好的方式是 LC_ALL 跟 LANG 一起设置吗?

默认LC_ALL 为空,只设置LANG即可

1 Like