bash:for循环在迭代时如何对文件进行排序

bash:for循环在迭代时如何对文件进行排序

for列出目录中的文件时,循环在排序方面的默认行为是什么?

例如

for sqlfile in *.sql; do mysql -u root -p pass < sqlfile; done

这是否记录在某处?

答案1

根据man bash“路径名扩展”部分:

如果出现这些字符之一,则该单词被视为一种模式,并替换为按字母顺序排序与模式匹配的文件名列表 [...]

此排序取决于 的值$LC_COLLATE

该变量确定对路径名扩展结果进行排序时使用的排序规则 [...]

从上面可以看出,这与循环无关for。 Glob 可以有多种使用方式,并且它们的扩展总是经过排序的。

答案2

for循环不排序,它们按照它们出现的顺序给出值:

$ for x in b a c ; do echo $x ; done
b
a
c

另一方面,Glob 确实按字母顺序排序,无论您是否在 a 中for或其他任何地方使用它们:

$ touch b a c
$ echo *
a b c

相关内容