これは私の心を傷つけます:
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
ロケールは、文化的に適切なアルファベット順にsort
localeの生バイトに指定された順序でソートします。en_US
sort
ロケール
C
:http://z
(58)が(115)より小さいので、https://a
最初に並べ替えてください。':'
's'
ロケール
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_