
Мне нравится отключать все локальные различия в скриптах оболочки. Какой предпочтительный способ сделать это?
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