UTF-8を使用したGNUソートのURL処理 - これに関する文書はどこにありますか?

UTF-8を使用したGNUソートのURL処理 - これに関する文書はどこにありますか?

これは私の心を傷つけます:

echo -e "http://z.com\nhttps://a.com" | sort

vs.

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

UTF-8でソートするとき、ソートはhttpとhttpsを無視するようです。しかし、本当に私を狂わせるのは、この動作に関するドキュメントが見つからないということです。誰かが私にアドバイスを与えることができますか?

答え1

Cロケールは、文化的に適切なアルファベット順にsortlocaleの生バイトに指定された順序でソートします。en_USsort

  • ロケールC:

    http://z(58)が(115)より小さいので、https://a最初に並べ替えてください。':''s'

  • ロケールen_US:

    https://aアメリカ英語の辞書編成順序は区切り文字を無視するので、最初に並べ替えられるので、文字列はおよびhttp://zhttpsa並べ替えられ、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_

関連情報