Обработка URL-адресов GNU URL-адресами с UTF-8 – где это документировано?

Это причиняет мне боль:

echo -e "http://z.com\nhttps://a.com" | sort vs. echo -e "http://z.com\nhttps://a.com" | LC_ALL=C sort 

Кажется, сортировка игнорирует http vs https при сортировке под UTF-8. Но то, что действительно меня заводит, – это то, что я не могу найти ни одной информации о таком поведении. Может кто-нибудь, пожалуйста, назовите меня?

В локали C sort сортировку в порядке, заданном необработанными байтами; в локали en_US сортируйте sort в соответствии с культурным лексикографическим порядком:

  • В локали C :

    http://z sort перед https://a потому что ':' (58) меньше, чем 's' (115).

  • В локали en_US :

    https://a сортирует до http://z потому что американский лексикографический порядок игнорирует разделители, поэтому строки сопоставляются так, как если бы они были httpsa и httpz , и, очевидно, s встречается до z .

man 1 sort говорит:

  *** WARNING *** The locale specified by the environment affects sort order. Set LC_ALL=C to get the traditional sort order that uses native byte values. 

Чтобы изменить только порядок сортировки, вы можете установить переменную среды LC_COLLATE :

 $ echo -e 'ab:d\nabc:d' | LC_COLLATE=en_US.UTF-8 sort abc:d ab:d $ echo -e 'ab:d\nabc:d' | LC_COLLATE=C.UTF-8 sort ab:d abc:d 

Примечание: переменная среды LC_ALL имеет приоритет над подробными переменными LC_ .