bash 的 * 是否按字母数字顺序匹配文件?

bash 的 * 是否按字母数字顺序匹配文件?

我想按文件名顺序将一堆文件连接在一起。

是否可以安全地假设这将按字母数字顺序提供它们?

cat * 

即给出的相同命令ls

答案1

简短的回答:是的。

来自打击人页:

单词拆分后,除非已设置 -f 选项(请参阅内置设置),否则 Bash 会扫描每个单词以查找字符 '*'、'?' 和 '['。如果出现其中一个字符,则该单词被视为模式,并替换为按字母顺序排序的与模式匹配的文件名列表。

答案2

简短的回答是肯定的,但您需要知道它认为字母数字顺序应该是什么,因为它可能与您心中的自然顺序不符。

例如,运行一些测试来了解您的系统如何处理大写和小写以及数字序列。

我在对 glob 返回的文件列表进行排序时遇到的一个常见问题是文件编号。我经常收到以下编号的文件:

blah_1.txt
blah_2.txt
...
blah_10.txt
blah_11.txt

但是,使用 glob*不会按此顺序返回它们,而是会得到类似以下内容:

blah_1.txt
blah_10.txt
blah_11.txt
...
blah_2.txt
blah_20.txt
...

因此 - 为了避免这个问题,您要么需要对返回的文件列表进行一些操作,要么重命名文件,使得个位数有前导零(即blah_01.txtblah_02.txt等等)。

相关内容