作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我注意到以下排序输出。谁知道为什么是'.'第一次排在前面,第二次排在最后?
我试图调试一个在大型排序文件中查找行的程序,但罪魁祸首似乎是我对 linux 排序的期望/理解。
$ sort --debug
sort: using ‘en_US.UTF-8’ sorting rules
/mnt/x/E
/mnt/x/.
<ctrl-D>
/mnt/x/.
________
/mnt/x/E
________
$ sort --debug
sort: using ‘en_US.UTF-8’ sorting rules
/mnt/x/Ed
/mnt/x/.T
<ctrl-D>
/mnt/x/Ed
_________
/mnt/x/.T
_________
$
最佳答案
不是那个“.”出现在其他字符之前或之后——根本没有被检查;它纯粹基于字母字符进行排序。
在您的第一个示例中,<end-of-string>
在 E
之前排序;在第二个例子中,E
在 T
之前排序.
此行为取决于整理的区域设置。您可以使用环境变量来影响它,例如 LC_COLLATE
:
$ env LC_COLLATE=C sort
/mnt/x/Ed
/mnt/x/.T
^D
/mnt/x/.T
/mnt/x/Ed
$ env LC_COLLATE=en_US.UTF-8 sort
/mnt/x/Ed
/mnt/x/.T
^D
/mnt/x/Ed
/mnt/x/.T
$
在C
下语言环境,考虑所有 ASCII 字符,并按其 ASCII 顺序排序;在许多其他语言环境中,标点符号被忽略 - 这大概是导致您所看到的行为的原因。
您可以使用 locale
检查您的区域设置命令。
关于我不明白的linux排序顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28874803/
我是一名优秀的程序员,十分优秀!