В чем разница между LANG=C и LC_ALL=C?

Если все, что вы хотите сделать, это сопоставить одну букву C, то вы сможете сделать это с помощью grepдостаточно легко. Добавьте флаг -iдля нечувствительного к регистру соответствия -.

grep -w C *
18
29.03.2020, 15:37
2 ответа

LANG устанавливает локаль по умолчанию, т. е. локаль, используемая, когда не указаны более конкретные настройки (LC_COLLATE, LC_NUMERIC, LC_TIMEи т. д. ); он не отменяет никаких настроек, он предоставляет базовое значение. LC_ALL, с другой стороны, переопределяет все настройки локали.

Таким образом, чтобы переопределить настройки скриптов, вы должны установить LC_ALL.

Вы можете проверить действие ваших настроек, запустив locale. Он показывает вычисленные значения в кавычках для всех категорий локали, которые не заданы явно; в вашем примере LANGне переопределяет LC_NUMERIC, а предоставляет значение по умолчанию. Если LC_ALLи LC_NUMERICне установлены в среде, языковой стандарт берется из LANG, а localeпоказывает это значение для LC_NUMERIC, как указано в кавычках.

См. справочную страницу localesи определения переменных среды POSIX для получения подробной информации. См. также Как работает программа "locale"?

29
19.03.2021, 02:31

LANGне отменяет:

$ export LC_NUMERIC="de_DE.UTF-8"
$ export LANG=C
$ printf "%.2f\n" 3.14
-bash: printf: 3.14: invalid number
3,00

Но LC_ALLдействительно:

$ export LC_NUMERIC="de_DE.UTF-8"
$ export LC_ALL=C
$ printf "%.2f\n" 3.14
3.14
7
19.03.2021, 02:31

Теги

Похожие вопросы