如何将 LC_CTYPE 设置为 C?
How do I set LC_CTYPE to C?
我正在尝试将 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
或重启虚拟机时,它仍然没有显示"C"
。也没有 LC_CYTPE
变量(我不明白)。
$ echo $LC_CTYPE
<empty string here>
我错过了什么?
我通过执行 unset LC_ALL
让它工作。一旦我这样做了,export LC_CTYPE=C
就成功了。
LC_ALL
是覆盖。当它被设置时,它优先于其他 LC_* env 变量并且 locale
命令尊重它。我发现很多页面都说默认情况下通常不会设置这个变量。
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.
我正在尝试将 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
或重启虚拟机时,它仍然没有显示"C"
。也没有 LC_CYTPE
变量(我不明白)。
$ echo $LC_CTYPE
<empty string here>
我错过了什么?
我通过执行 unset LC_ALL
让它工作。一旦我这样做了,export LC_CTYPE=C
就成功了。
LC_ALL
是覆盖。当它被设置时,它优先于其他 LC_* env 变量并且 locale
命令尊重它。我发现很多页面都说默认情况下通常不会设置这个变量。
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.