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


25

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

可以肯定地说这会给我字母数字顺序吗?

cat * 

ls给出的顺序相同。

Answers:


26

简短的回答:是的。

bash手册页:

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


6
请注意,“字母顺序”取决于语言环境设置(尤其是$LC_COLLATE)。
grawity 2010年

4
@grawity是正确的,但是它将产生与ls在同一系统上相同的输出。
BloodPhilia

8

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

例如,对如何处理大写和小写以及在数字序列上进行一些测试。

我在排序全局文件返回的文件列表时遇到的一个常见问题是编号文件。我经常看到文件编号如下:

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

但是,使用的全局变量*不会按此顺序返回它们,相反,您将得到类似以下内容的信息:

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

所以-避免这个问题你要么需要做的文件,或使个位数重命名的文件返回的列表上的一些操作有前导零(即blah_01.txtblah_02.txt等)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.