这让我心痛:
echo -e "http://z.com\nhttps://a.com" | sort
vs.
echo -e "http://z.com\nhttps://a.com" | LC_ALL=C sort
Run Code Online (Sandbox Code Playgroud)
在 UTF-8 下排序时,排序似乎忽略了 http 与 https。但真正让我生气的是我找不到关于这种行为的任何文件。有人可以指点我吗?
在C
语言环境下,sort
按照原始字节给出的顺序进行排序;在en_US
locale 中,sort
按文化上适当的字典顺序排序:
在C
语言环境中:
http://z
排序之前,https://a
因为':'
(58) 小于's'
(115)。
在en_US
语言环境中:
https://a
排序之前,http://z
因为美式英语词典顺序忽略了分隔符,因此字符串被整理成好像它们是httpsa
and 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.
Run Code Online (Sandbox Code Playgroud)
要仅更改排序顺序,您可以设置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
Run Code Online (Sandbox Code Playgroud)
注意:环境变量LC_ALL
优先于详细LC_
变量。
归档时间: |
|
查看次数: |
228 次 |
最近记录: |