Linux 如何将LC_CTYPE设置为C?
我试图将Linux 如何将LC_CTYPE设置为C?,linux,ubuntu,locale,Linux,Ubuntu,Locale,我试图将LC\u CTYPE,LC\u COLLATE设置为C,同时将剩余的LC\u*设置为“en\u 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.UT
LC\u CTYPE
,LC\u COLLATE
设置为C
,同时将剩余的LC\u*
设置为“en\u 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=
及
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\u CYTPE
变量(我不理解)
$echo$LC\u CTYPE
我遗漏了什么?我通过执行
unset LC\u ALL
使它工作起来。一旦我这样做了,导出LC\u CTYPE=C
就起作用了
LC_ALL
是一种覆盖。设置后,它将优先于其他LC_*env变量,并且locale
命令将尊重这一点。我发现许多页面都说明此变量通常不是默认设置的。区域设置手册(7)解释了如何为类别赋值:
如果setlocale(3)的第二个参数是空字符串,“,
对于默认区域设置,它是使用以下方法确定的
步骤:
您应该在Dockerfile中更改环境变量(并构建新映像),而不是在已经运行的容器中,因为这是无用的。在Ubuntu 16.04 VM中也会发生同样的事情。Sourcing
~/.bashrc
通常不会重新读取全局配置文件。无论如何,这更适合askubuntu.com。
$ 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
$ echo $LC_CTYPE
<empty string here>
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.