Команда locale
не печатает переменные окружения. Она печатает состояние локали пользователя, установленной окружением или умозаключением.
Например, если LC_TIME
не установлен, его значение берется из LANG
. А если установлено LC_ALL
, то все остальные настройки отменяются.
Попробуйте:
$ LANG=ja_JP.utf8 locale
LANG=ja_JP.utf8
LANGUAGE=en_GB:en
LC_CTYPE="ja_JP.utf8"
LC_NUMERIC="ja_JP.utf8"
LC_TIME="ja_JP.utf8"
LC_COLLATE="ja_JP.utf8"
LC_MONETARY="ja_JP.utf8"
LC_MESSAGES="ja_JP.utf8"
LC_PAPER="ja_JP.utf8"
LC_NAME="ja_JP.utf8"
LC_ADDRESS="ja_JP.utf8"
LC_TELEPHONE="ja_JP.utf8"
LC_MEASUREMENT="ja_JP.utf8"
LC_IDENTIFICATION="ja_JP.utf8"
LC_ALL=
$ LANG=ja_JP.utf8 LC_CTYPE=en_GB.UTF-8 locale
LANG=ja_JP.utf8
LANGUAGE=en_GB:en
LC_CTYPE=en_GB.UTF-8
LC_NUMERIC="ja_JP.utf8"
LC_TIME="ja_JP.utf8"
LC_COLLATE="ja_JP.utf8"
LC_MONETARY="ja_JP.utf8"
LC_MESSAGES="ja_JP.utf8"
LC_PAPER="ja_JP.utf8"
LC_NAME="ja_JP.utf8"
LC_ADDRESS="ja_JP.utf8"
LC_TELEPHONE="ja_JP.utf8"
LC_MEASUREMENT="ja_JP.utf8"
LC_IDENTIFICATION="ja_JP.utf8"
LC_ALL=
$ LANG=ja_JP.utf8 LC_CTYPE=en_GB.UTF-8 LC_ALL=POSIX locale
LANG=ja_JP.utf8
LANGUAGE=en_GB:en
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=POSIX
Вы заметите, что вычисляемые значения показаны в двойных кавычках, а те, которые явно заданы переменными окружения, - без кавычек.
Вы не говорите, как вы получаете пользовательский ввод.
Сread
:
read -k 'answer?Are you OK? '
case $answer in
(y | Y | $'\n') echo 1;;
# or ([$'yY\n']) echo 1;;
(*) echo 2;;
esac
Но если вы используете read
без -k
или vared
и хотите определить, когда пользователь нажимает Enter без ввода какого-либо ответа, тогда вы захотите проверить наличие пустого значение:
answer=; vared -p 'Are you OK? ' answer
case $answer in
(y | Y | "") echo 1;;
# or ([yY] | "") echo 1;;
(*) echo 2;;
esac
Или задайте ответ с помощью y
(, хотя пользователю придется выполнить BackspaceN , чтобы сказать нет):
answer=y; vared -p 'Are you OK? ' answer
case $answer in
(y | Y) echo 1;;
(*) echo 2;;
esac