[Comm] Неправильная сортировка в консоли?

Sergey Stepanov =?iso-8859-1?q?dlagovna_=CE=C1_mail=2Eru?=
Чт Окт 12 17:36:02 MSD 2006


> On Thu, 12 Oct 2006 00:13:38 +0400
> "Damir Shayhutdinov" <lost404 на gmail.com> wrote:
> 
> > > Объясните пожалуйста, почему так происходит.
> > > Вопрос: в чем причина неправильной сортировки? Как исправить?
> > Это настройки локали (LC_COLLATE)
> > 
> > Если сделать LC_COLLATE=C ls -1
> > то получится как в винде.
> 
> $ ls -1
> _
> а
> А
> аа
> а_а
> аб
> а_б
> аф
> а_ф
> аш
> а_ш
> б
> Б
> в
> г
> д
...

> $ LC_COLLATE=C ls -1
> _
> ё
> ю
> а
> а_а
> а_б
> а_ф
> а_ш
> аа
> аб
> аф
> аш
> б
> ц
> д
> е
> ф
> г
> ...
> Китайкин Анатолий Константинович
> ОАО "Радиоавионика", СПб
> _______________________________________________
> Community mailing list
> Community на lists.altlinux.org
> https://lists.altlinux.org/mailman/listinfo/community

Хм, в первом примере алгоритм сортировки, при обработке
строк, пропускает "небуквенные" символы. Поэтому сортировка
такая странная. Зато по русскому алфавиту.

Во втором примере строки сортируются в чистом виде, 
не сбрасывая со счетов "небуквенные" символы. Сортировка
в этом случае правильная. Но зато не по русскому алфавиту.

Как же сделать так, чтобы и сортировка шла по алфавиту,
и "небуквенные" символы учитывались при сортировке?


И еще пара вопросов.

1.
Пошукал в тырнете на предмет допустимых значений, которые 
может принимать системная переменная LC_COLLATE. Нигде этого
не описано. Подозреваю что допустимые значения - это
вывод команды locale -a, там в списке есть "C". Так ли это?

2.
Я даю команду 

#LC_COLLATE=C 

Проверяю 

#set | grep LC_COLLATE

Все в порядке, переменная LC_COLLATE имеет значение C.

Затем даю команду 

#locale 

В выводимом списке значение переменной LC_COLLATE установлено
как "ru_RU.KOI8-R"

Я не пойму, это две разных переменных с одинаковым именем?


Со всяческими пожеланиями, Сергей.
http://xi.net.ru




Подробная информация о списке рассылки community