我尝试将LC_CTYPE
,LC_COLLATE
设置为C
,同时将其余的LC_*
设置为"en_US.UTF-8"
。我在Ubuntu 16.04虚拟机中工作。我当前的环境有:
$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US
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 -a
C
C.UTF-8
en_US.utf8
<some other locales>
POSIX
当我跑的时候
$ sudo update-locale LC_CTYPE=C
未设置LC_CTYPE
$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US
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=
我可以看到默认设置已写入文件
$ cat /etc/default/locale
# File generated by update-locale
LC_CTYPE=C
但是,当我source ~/.bashrc
或重新启动虚拟机时,它仍然没有显示"C"
。这里也没有LC_CYTPE
变量(我不明白)。
$ echo $LC_CTYPE
<empty string here>
我遗漏了什么?
发布于 2019-04-30 07:25:26
我是通过执行unset LC_ALL
让它工作的。一旦我这样做了,export LC_CTYPE=C
就开始工作了。
LC_ALL
是一个重写。当它被设置时,它优先于其他LC_*环境变量,并且locale
命令遵守这一点。我发现很多页面都声明这个变量在默认情况下通常是不设置的。
发布于 2021-03-20 09:14:40
locale(7)的手册页解释了如何为类别赋值:
如果setlocale(3)的第二个参数是默认区域设置的空字符串"",则使用以下步骤确定它:
1. If there is a non-null environment variable LC_ALL, the value
of LC_ALL is used.
2. If an environment variable with the same name as one of the
categories above exists and is non-null, its value is used for
that category.
3. If there is a non-null environment variable LANG, the value of
LANG is used.
https://stackoverflow.com/questions/55769972
复制相似问题