shell: 通配符能保证字母顺序吗?

shell: Do wildcards guarantee alphabetical order?

当我拥有文件 a.txtb.txtc.txt 时,保证

cat *.txt > all_files.txt

cat ?.txt > all_files.txt

会按字母顺序组合文件吗?

(在我所有的测试中,字母顺序都被保留了下来,但我不确定,因为例如 ls 顺序是未定义的,不需要按字母顺序排列——但通常是这样,因为文件经常按字母顺序写入目录)

不,这取决于 区域设置。该顺序由区域设置中的整理顺序决定,可以使用 LC_COLLATELC_ALL 环境变量进行更改。请注意 bash 在这方面的行为与其他一些 shell 不同(例如 Korn shell)。

如果您的语言环境设置为 CPOSIX,那么它将按字符集顺序排列。否则你可能只会注意到混合大小写字母的不同,例如en_ locales 的顺序是 aAbBcC ... xXyYzZ。例如参见 [​​=16=].

可以使用 locale -a.

列出可用的语言环境

编辑:另一个变量LANG可用,但现在一般用得不多了。根据单一 UNIX 规范,它被使用:在没有 LC_ALL 和其他 LC_* ... 环境变量 的情况下。