为什么回声两次匹配某些文件?


11
$ touch file{1..12}

$ echo *e{1..12}
file1 file2 file3 file4 file5 file6 file7 file8 file9 file10 file11 file12

$ echo *{1..12}
file1 file11 file12 file2 file3 file4 file5 file6 file7 file8 file9 file10 file11 file12

我不明白为什么会这样。请有人可以解释吗?

Answers:


21

花括号不是通配符模式。查看bash扩展文档:括号在此过程中非常早地扩展,而通配符模式在最后一个步骤¹中扩展。

最初,命令由两个词echo*{1..12}。括号展开之后,命令包含13个字:echo*1*2,..., *12。然后扩展通配符模式。*1扩展到以结尾的文件名列表,该列表1不仅包括,file1而且还包括file11(随后按字典顺序排序)。同样*2扩展到file12file2(按此顺序)。所以,你得到echofile1file11file12file2,然后其他通配符匹配单个文件:file3file4,..., file12

¹ 最后,如果您遵循手册的说明,但是“引号删除”并不是真正的事情-引号的解析早于扩展过程。

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.