如何找到 ls 与我的区域设置的排序顺序?

如何找到 ls 与我的区域设置的排序顺序?

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. 我的解释正确吗?它们可以互换吗?
  2. 是否有我的区域设置的排序顺序列表?我想找到下划线之前的字符。

答案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/。我并不声称 U​​TF-8 语言环境中的排序规则是以这种方式实现的,尽管我坚信确实如此。

相关内容