Как мне установить LC_CTYPE в C? - PullRequest
2 голосов
/ 20 апреля 2019

Я пытаюсь установить 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=

I может увидеть, что по умолчанию записано в файл

$ cat /etc/default/locale
# File generated by update-locale
LC_CTYPE=C

, но когда я source ~/.bashrc или перезагружаю ВМ, он все равно не показывает "C".Также нет переменной LC_CYTPE (чего я не понимаю).

$ echo $LC_CTYPE
<empty string here>

Чего мне не хватает?

1 Ответ

0 голосов
/ 30 апреля 2019

Я заставил его работать, выполнив unset LC_ALL.Как только я это сделал, export LC_CTYPE=C сработало.

LC_ALL - это переопределение.Когда он установлен, он имеет приоритет над другими переменными LC_ * env, и команда locale это учитывает.Я нашел много страниц, на которых говорилось, что эта переменная обычно не устанавливается по умолчанию.

...