I'm trying to set LC_CTYPE
, LC_COLLATE
to C
, while keeping the remaining LC_*
set to "en_US.UTF-8"
. I'm working inside an Ubuntu 16.04 VM. My current environment has:
$ 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=
and
$ locale -a
C
C.UTF-8
en_US.utf8
<some other locales>
POSIX
When I RUN
$ sudo update-locale LC_CTYPE=C
LC_CTYPE doesn't get set
$ 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=
I can see the default has been written to the file
$ cat /etc/default/locale
# File generated by update-locale
LC_CTYPE=C
but when I source ~/.bashrc
or restart the VM, it still doesn't show "C"
. There also isn't an LC_CYTPE
variable (which I don't understand).
$ echo $LC_CTYPE
<empty string here>
What am I missing?
I got it to work by executing unset LC_ALL
. Once I did that, export LC_CTYPE=C
worked.
LC_ALL
is an override. When it's set, it takes precedence over the other LC_* env variables and the locale
command honors that. I found many pages that stated that this variable is usually not set by default.