Ошибка локализации в программе sort(1)

В man на программу sort(1) говорится, что:

     The default sort order depends on the value  of  LC_COLLATE.
     If  LC_COLLATE  is set to C, sorting will be in ASCII order.
     If LC_COLLATE is set to en_US, sorting is  case  insensitive
     except  when the two strings are otherwise equal and one has
     an uppercase letter earlier than the  other.  Other  locales
     will have other sort orders.

Выполните скрипты 1.sh и 2.sh. Результаты должны быть одинаковы, т.к. порядок букв в кодировках ASCII и iso8859-5 совпадают, за исключением букв "ё" и "Ё". Тем не менее результаты различаются. Исходные данные для примера взяты из Корана.

#!/bin/sh
#
# File 1.sh
#
echo $LANG
env | grep LC_

sort <<EOF
хороший
заём
Что
вы
уготовили
вперёд
из
добра
для
самих
себя
найдёте
EOF
#!/bin/sh
#
# File 2.sh
#
LANG=C; export LANG
LC_COLLATE=C; export LC_COLLATE
LC_CTYPE=C; export LC_CTYPE
LC_MESSAGES=C; export LC_MESSAGES
LC_MONETARY=C; export LC_MONETARY
LC_NUMERIC=C; export LC_NUMERIC
LC_TIME=C; export LC_TIME

echo $LANG
env | grep LC_

sort <<EOF
хороший
заём
Что
вы
уготовили
вперёд
из
добра
для
самих
себя
найдёте
EOF

А вот результаты:

$ 1.sh
ru
LC_COLLATE=ru
LC_CTYPE=ru
LC_MESSAGES=ru
LC_MONETARY=ru
LC_NUMERIC=ru
LC_TIME=C
Что
вперёд
вы
для
добра
заём
из
найдёте
самих
уготовили
себя
хороший
$ 2.sh
C
LC_COLLATE=C
LC_CTYPE=C
LC_MESSAGES=C
LC_MONETARY=C
LC_NUMERIC=C
LC_TIME=C
Что
вперёд
вы
для
добра
заём
из
найдёте
самих
себя
уготовили
хороший
$ 

Как исправить я не знаю. Ещё не разбирался.


Copyright © 2002, Vitaly Filatov, Moscow, Russia
Webmaster