Я уже некоторое время смотрю на это, желая оптимизировать сценарий оболочки, который я поддерживаю и который имеет большую международную базу пользователей. (тяжелый, как в процентах, а не в количестве).
Большинство параметров, которые я видел в Интернете и SO, похоже, рекомендуют то, что я вижу здесь, устанавливая локаль глобально (излишне)
export LC_ALL=C
или добавьте его в каждую отдельную команду следующим образом: gnu.org (утомительно)
$ echo abcdefghijklmnopqrstuvwxyz | LC_ALL=C /usr/xpg4/bin/tr 'a-z' 'A-Z' ABCDEFGHIJKLMNOPQRSTUVWXYZ
Я хотел не допускать сбоев в локали пользователя как невидимый побочный эффект запуска моей программы. Как оказалось, этого легко добиться, как и следовало ожидать, отказавшись от глобализации. Нет необходимости экспортировать эту переменную за пределы вашей программы.
Мне пришлось по какой-то причине установить LANG вместо LC_ALL, но были установлены все отдельные локали, что достаточно для меня функционально.
Вот тест, простой, как может быть
#!/bin/bash
# locale_checker.sh
#Check and set locale to LC_ALL to optimize character sort and search.
echo "locale was $LANG"
LANG=C
locale
и вывод + доказательство того, что это временно и может быть ограничено процессом моего скрипта.
mateor@:~/snippets$ ./locale_checker.sh
locale was en_US.UTF-8
LANG=C
LANGUAGE=en_US:en
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=
mateor@:~/snippets$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US:en
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=
Вот, пожалуйста. Вы получаете оптимизированную локализацию, не забивая ни в чем не повинную среду другого человека, а также избегаете утомительной подачи его везде, где, по вашему мнению, это может помочь.