shell: 通配符能保证字母顺序吗?
shell: Do wildcards guarantee alphabetical order?
当我拥有文件 a.txt
、b.txt
和 c.txt
时,保证
cat *.txt > all_files.txt
或
cat ?.txt > all_files.txt
会按字母顺序组合文件吗?
(在我所有的测试中,字母顺序都被保留了下来,但我不确定,因为例如 ls
顺序是未定义的,不需要按字母顺序排列——但通常是这样,因为文件经常按字母顺序写入目录)
不,这取决于 区域设置。该顺序由区域设置中的整理顺序决定,可以使用 LC_COLLATE
或 LC_ALL
环境变量进行更改。请注意 bash 在这方面的行为与其他一些 shell 不同(例如 Korn shell)。
如果您的语言环境设置为 C
或 POSIX
,那么它将按字符集顺序排列。否则你可能只会注意到混合大小写字母的不同,例如en_ locales 的顺序是 aAbBcC ... xXyYzZ。例如参见 [=16=].
可以使用 locale -a
.
列出可用的语言环境
编辑:另一个变量LANG
可用,但现在一般用得不多了。根据单一 UNIX 规范,它被使用:在没有 LC_ALL 和其他 LC_* ... 环境变量 的情况下。
当我拥有文件 a.txt
、b.txt
和 c.txt
时,保证
cat *.txt > all_files.txt
或
cat ?.txt > all_files.txt
会按字母顺序组合文件吗?
(在我所有的测试中,字母顺序都被保留了下来,但我不确定,因为例如 ls
顺序是未定义的,不需要按字母顺序排列——但通常是这样,因为文件经常按字母顺序写入目录)
不,这取决于 区域设置。该顺序由区域设置中的整理顺序决定,可以使用 LC_COLLATE
或 LC_ALL
环境变量进行更改。请注意 bash 在这方面的行为与其他一些 shell 不同(例如 Korn shell)。
如果您的语言环境设置为 C
或 POSIX
,那么它将按字符集顺序排列。否则你可能只会注意到混合大小写字母的不同,例如en_ locales 的顺序是 aAbBcC ... xXyYzZ。例如参见 [=16=].
可以使用 locale -a
.
编辑:另一个变量LANG
可用,但现在一般用得不多了。根据单一 UNIX 规范,它被使用:在没有 LC_ALL 和其他 LC_* ... 环境变量 的情况下。