Я был озадачен этим, когда увидел следующие файлы, перечисленные ls
в странном порядке:
Star Wars Episode II - Attack of the Clones (2002) BDRip.mkv
Star Wars Episode III - Revenge of the Sith (2005) BDRip.mkv
Star Wars Episode I - The Phantom Menace (1999) BDRip.mkv
Star Wars Episode IV - A New Hope (1977) BDRip.mkv
Star Wars Episode VI - Return of the Jedi (1983) BDRip.mkv
Star Wars Episode V - The Empire Strikes Back (1980) BDRip.mkv
С человеческой точки зрения, сначала должно идти «I», затем «II» и так далее.
поэтому я создал файл со следующим содержимым:
$ cat 1
Star Wars Episode II - Attack
Star Wars Episode III - Revenge
Star Wars Episode I - The
Star Wars Episode IV - A
Star Wars Episode VI - Return
Star Wars Episode V - The
если я сортирую это, это дает мне это:
$ sort 1
Star Wars Episode II - Attack
Star Wars Episode III - Revenge
Star Wars Episode I - The
Star Wars Episode IV - A
Star Wars Episode VI - Return
Star Wars Episode V - The
Однако, если я удалю '-' и все после этого отсортируется правильно:
$ cat 1
Star Wars Episode II
Star Wars Episode III
Star Wars Episode I
Star Wars Episode IV
Star Wars Episode VI
Star Wars Episode V
$ sort 1
Star Wars Episode I
Star Wars Episode II
Star Wars Episode III
Star Wars Episode IV
Star Wars Episode V
Star Wars Episode VI
Итак, как только я добавляю любой символ после пробела, он начинает непредсказуемо сортировать для меня:
$ cat 1
Star Wars Episode II y
Star Wars Episode III x
Star Wars Episode I z
Star Wars Episode IV w
Star Wars Episode VI v
Star Wars Episode V u
$ sort 1
Star Wars Episode III x
Star Wars Episode II y
Star Wars Episode IV w
Star Wars Episode I z
Star Wars Episode VI v
Star Wars Episode V u
Какой-нибудь намек на такое поведение?
Обновление: сортировка: с использованием правил сортировки en_CA.UTF-8.
обновление №2 согласно комментарию ниже, это из-за локали.
ls | LANG=C sort
Star Wars Episode I - The Phantom Menace (1999) BDRip.mkv
Star Wars Episode II - Attack of the Clones (2002) BDRip.mkv
Star Wars Episode III - Revenge of the Sith (2005) BDRip.mkv
Star Wars Episode IV - A New Hope (1977) BDRip.mkv
Star Wars Episode V - The Empire Strikes Back (1980) BDRip.mkv
Star Wars Episode VI - Return of the Jedi (1983) BDRip.mkv
Почему тогда локаль UTF8 делает ее другой? Проверил с ru_RU.UTF8 (неправильная сортировка) и ru_RU.KOI8-R (правильная сортировка)
Обновление №3. Речь идет о локали: http://www.gnu.org/software/coreutils/faq/#Sort-does-not-sort-in-normal-order_0021
LC_ALL=C
заставляет его работать, поэтому оно должно иметь какое-то отношение к локали. - person Ramchandra Apte   schedule 05.12.2013