各个程序的字母顺序不同

各个程序的字母顺序不同

这不是问题,但我只是好奇。

为什么程序中文件的字母顺序列表不同?

在我看来,好像每个程序都实现了自己的文件名字母排序方法。也许这些方法源自程序所依赖的库。显然,它们对“_”或“-”等符号的处理方式不同。我认为这些不一致有点奇怪。

以下是示例。我创建了 2 个文件,“flop.png”和“flop_drop.png”。在 BASH shell 中,列表如下:

-rw-rw-r--  1 pauljohn pauljohn  3547 Apr  1 21:50 flop_drop.jpg
-rw-rw-r--  1 pauljohn pauljohn  3547 Apr  1 21:50 flop.jpg

然而,在 Nautilus 中,情况却相反

在此处输入图片描述

但在 Geeqie 中,我看到的内容与 BASH 中的相同:

在此处输入图片描述

UNIX find 程序与 Nautilus 的一致:

$ find . -name "flo*"
./flop.jpg
./flop_drop.jpg

我见过各种类似的情况,但我并不完全理解这种模式。我增加了各种变化,BASH 中的 ls 输出表明它包括按字母顺序排序的后缀:

-rw-rw-r-- 1 pauljohn pauljohn 3547 Apr  1 21:50 flop_drop.jpg
-rw-rw-r-- 1 pauljohn pauljohn 3547 Apr  1 21:50 flop.jpg
-rw-rw-r-- 1 pauljohn pauljohn 3547 Apr  1 22:14 flop_nop.jpg
-rw-rw-r-- 1 pauljohn pauljohn 3547 Apr  1 22:15 flop_qrop.jpg

但 Nautilus 总是先保留“flop.jpg”,无论下划线后面是什么。我发现 Thunar 也是这样。

不过,为了进行比较,我安装了一个名为“gwenview”的图像查看器。在那里,我们得到了完全不同的东西。顺序是

flop_drop.jpg
flop_nop.jpg
flop_qrop.jpg
flop.jpg

对于应该如何做,是否存在不同的思想流派,或者这些只是偶然的差异?

答案1

显然,他们对 LC_COLLATE 环境变量使用了不同的语言环境,该变量定义了“字符串(文件名……)如何按字母顺序排序”(来源)。您可以使用 显示系统可用的语言环境locale -a。以下示例显示了如何仅更改一个命令的设置(该test文件包含四个示例文件名),我的方法是尝试一下,并在alias sort="LC_COLLATE=C sort"必要时定义别名:

> sort test # my system standard is LC_COLLATE=de_DE.UTF-8
flop_drop.jpg
flop.jpg
flop_nop.jpg
flop_qrop.jpg
> LC_COLLATE=C sort test
flop.jpg
flop_drop.jpg
flop_nop.jpg
flop_qrop.jpg

这个答案相关问题对区域设置、它们的定义位置以及如何更改它们进行了很好的概述。

然而,鹦鹉螺号显然有一个漏洞

编辑

find似乎忽略了 LC_COLLATE 的手动设置:

> find . -name "flop*" # my system standard is LC_COLLATE=de_DE.UTF-8
./flop.jpg
./flop_drop.jpg
./flop_qrop.jpg
./flop_nop.jpg
> LC_COLLATE=de_DE.UTF-8 find . -name "flop*"
./flop.jpg
./flop_drop.jpg
./flop_qrop.jpg
./flop_nop.jpg
> LC_COLLATE=en_EN.UTF-8 find . -name "flop*"
./flop.jpg
./flop_drop.jpg
./flop_qrop.jpg
./flop_nop.jpg

我完全不知道它为什么会这样表现,特别是因为它的手册页列出了程序使用的 LC_COLLATE。我无话可说了。

相关内容