对LC_COLLATE进行排序设置以获得' a' < ' A' < ' B' < ' B'

时间:2015-04-28 06:26:01

标签: linux

LC_COLLATE是否有设置来获取排序顺序:'a' < 'A' < 'b' < 'B'? (见本文末尾的输出)。注意:'A' < 'a' < 'B' < 'b'也没关系。这是一个说明问题的例子。

首先,我们在临时文件夹中创建一堆空文件,如下所示:

$ mkdir temp
$ cd temp
$ cat ../echo-scr 
echo > a-a
echo > a-b
echo > a-A
echo > a-B
echo > B-a
echo > B-b
echo > B-A
echo > B-B
echo > aa-a
echo > aa-A
echo > aA-a
echo > aA-A
echo > Aa-a
echo > Aa-A
echo > AA-a
echo > AA-A
$ bash ../echo-scr 

设置为"LC_COLLATE=en_US.utf8"时,问题是以'a'开头的文件被分为两组('a' < 'A'未被尊重):

$ export LC_COLLATE=en_US.utf8; /bin/ls -1
a-a
a-A
aa-a
aa-A
aA-a
aA-A
Aa-a
Aa-A
AA-a
AA-A
a-b
a-B
B-a
B-A
B-b
B-B

显然"LC_COLLATE=C"会将文件从'a'开始保存,但会产生另一个问题 - 现在我们得到'A' < 'B' < 'a' < 'b',但我们想要的是'A' < 'a' < 'B' < 'b'(以下排序)订单也很好:'a' < 'A' < 'b' < 'B')。

$ export LC_COLLATE=C; /bin/ls -1
AA-A
AA-a
Aa-A
Aa-a
B-A
B-B
B-a
B-b
a-A
a-B
a-a
a-b
aA-A
aA-a
aa-A
aa-a

所以问题是:我应该使用LC_COLLATE的值来获得以下排序顺序 - 'a' < 'A' < 'b' < 'B'(下面的示例输出)?

a-a
a-A
a-b
a-B
aa-a
aa-A
aA-a
aA-A
Aa-a
Aa-A
AA-a
AA-A
B-a
B-A
B-b
B-B

0 个答案:

没有答案