В 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 Что вперёд вы для добра заём из найдёте самих себя уготовили хороший $ |
Как исправить я не знаю. Ещё не разбирался. |
|