ls -l
我在目录上使用,并且惊讶地发现排序顺序忽略了空格和下划线。例如,
$ echo $LANG
en_AU.UTF-8
$ ls -l
total 0
-rw-r--r-- 1 sparhawk sparhawk 0 Nov 20 21:12 a_a
-rw-r--r-- 1 sparhawk sparhawk 0 Nov 20 21:13 a b
-rw-r--r-- 1 sparhawk sparhawk 0 Nov 20 21:13 a_c
-rw-r--r-- 1 sparhawk sparhawk 0 Nov 20 21:13 a d
$ LANG=en_AU ls -l
total 0
-rw-r--r-- 1 sparhawk sparhawk 0 Nov 20 21:13 a b
-rw-r--r-- 1 sparhawk sparhawk 0 Nov 20 21:13 a d
-rw-r--r-- 1 sparhawk sparhawk 0 Nov 20 21:12 a_a
-rw-r--r-- 1 sparhawk sparhawk 0 Nov 20 21:13 a_c
在我的默认语言环境中,空格和下划线是可以互换的,如果没有 UTF-8,空格位于下划线之前。我看到en_US
和 的结果类似en_US.UTF-8
。
我有两个问题:
- 我的解释正确吗?它们可以互换吗?
- 是否有我的区域设置的排序顺序列表?我想找到下划线之前的字符。
答案1
这不是完整的答案,而是一些文章和想法。
在这里您可以找到有关排序顺序的一些注释http://www.gnu.org/software/coreutils/faq/#Sort-does-not-sort-in-normal-order_0021
这是如何定义区域设置的标准http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap07.html#tag_07_03
这是Unicode标准和排序规则(用于排序)http://www.unicode.org/reports/tr10/。我并不声称 UTF-8 语言环境中的排序规则是以这种方式实现的,尽管我坚信确实如此。