我正在尝试将LC_CTYPE
,LC_COLLATE
设置为C
,同时将其余的LC_*
设置为"en_US.UTF-8"
。我正在使用Ubuntu 16.04 VM。我当前的环境有:
$ 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
或重新启动VM时,它仍然没有显示"C"
。也没有LC_CYTPE
变量(我不理解)。
$ echo $LC_CTYPE
<empty string here>
我想念什么?
答案 0 :(得分:0)
我通过执行unset LC_ALL
使它起作用。一旦这样做,export LC_CTYPE=C
就可以工作。
LC_ALL
是替代。设置后,它优先于其他LC_ * env变量,而locale
命令对此优先。我发现有很多页面指出该变量通常不是默认设置。
答案 1 :(得分:0)
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.