如何将LC_CTYPE设置为C?

时间:2019-04-20 03:25:45

标签: linux ubuntu locale

我正在尝试将LC_CTYPELC_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>

我想念什么?

2 个答案:

答案 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.