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

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

Мне нравится отключать все локальные различия в скриптах оболочки. Какой предпочтительный способ сделать это?

LANG=CилиLC_ALL=C

решение1

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»?

решение2

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

$ экспорт LC_NUMERIC="de_DE.UTF-8"
$ экспорт ЯЗЫК=C
$ printf "%.2f\n" 3.14
-bash: printf: 3.14: неверное число
3,00

Но LC_ALLделает ли:

$ экспорт LC_NUMERIC="de_DE.UTF-8"
$ экспорт LC_ALL=C
$ printf "%.2f\n" 3.14
3.14

Связанный контент