Я нашел, что вид приводит к ASCII:
Исходный файл test
:
1-
11-
1-a
11-a
Вид с помощью ASCII:
$ LANG=en_US.ascii sort test
1-
1-a
11-
11-a
И использование UTF-8:
$ LANG=en_US.utf8 sort test
1-
11-
11-a
1-a
Я чувствую, что это таким образом парадоксально, и это не лексикографический порядок.
Не символ '-' (002d
) всегда меньше затем [0-9]
(0030-0039
)? Каково общее правило в сопоставлении UTF-8?
И как обойти его, просто сделайте -
будьте меньше затем [0-9]
в то время как сохраняют другие символы неизменными для UTF-8, в Linux? (Таким образом, это может влиять на результат ls --sort
, sort
, и т.д.)
Знак "минус" проигнорирован в первичной обработке. Так виды первичной обработки 1
, 11
, 1a
, 11a
. С тех пор 1
< a
, Вы добираетесь 11a
< 1a
и таким образом 11-a
< 1-a
.
-
переменный элемент сопоставления, означая, что конструктор можно принять решение проигнорировать его. glibc реализация, по-видимому, делает так. На практике большая часть пунктуации затронута этим поведением.
Можно читать в окровавленных деталях в Алгоритме сопоставления Unicode, по модулю как glibc реализует его.
Как объяснил Peter Eisentraut, это вызвано тем, что алгоритм сортировки для Unicode игнорирует -
при сортировке.
Единственный путь вокруг этого состоит в том, чтобы определить Вашу собственную локаль с другим сопоставлением (сортирующий правила). Это однако довольно нетривиально. Кроме того, это дало бы Вам систему с необычными правилами сортировки, которые могут вызвать проблемы с другим программным обеспечением.
Так реалистично необходимо будет или переключить локаль на ASCII (если Вам не нужен символ Unicode), или вид с помощью программы, где можно настроить правила сортировки непосредственно.