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