我想按文件名顺序将一堆文件连接在一起。
是否可以安全地假设这将按字母数字顺序提供它们?
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.txt
,blah_02.txt
等等)。