Linux bash for循环中的迭代顺序有保证吗?

Linux bash for循环中的迭代顺序有保证吗?,linux,bash,glob,Linux,Bash,Glob,假设我在bash中有一个for循环,如下所示: for i in $MYDIR/*.jar do # do something with files done 是否保证迭代的顺序,即循环是否总是以相同的顺序处理文件?如果保证,顺序是否按字母顺序排列?根据: 路径名扩展 在分词之后,除非设置了-f选项,否则bash将进行扫描 字符*、?和[.如果其中一个字符 出现时,则该词被视为模式,并替换为 按字母顺序排列的与模式匹配的文件名列表(请参见 模式匹配(见下文) 因此,由于globbing

假设我在bash中有一个for循环,如下所示:

for i in $MYDIR/*.jar
do
    # do something with files
done
是否保证迭代的顺序,即循环是否总是以相同的顺序处理文件?如果保证,顺序是否按字母顺序排列?

根据:

路径名扩展

在分词之后,除非设置了-f选项,否则bash将进行扫描 字符*、?和[.如果其中一个字符 出现时,则该词被视为模式,并替换为 按字母顺序排列的与模式匹配的文件名列表(请参见 模式匹配(见下文)


因此,由于globbing扩展规则,文件将按字母顺序处理(这取决于您的区域设置,请参阅注释)。

我相信这是适用的:顺便说一句,这不是关于for循环的一般问题,而是关于globs的问题。
对于9 5 3中的I;请回送“$I”;done
将按该顺序运行。您问的问题是错误的。不是循环扩展了*.s。shell将首先将*.jar扩展为文件列表,然后循环将在该文件列表上迭代。如果区域设置为C,则只有ASCII顺序。“按字母顺序排序”并非全部都是ASCII…例如,某些地区的排序顺序为AaBbCc…而另一些地区的排序顺序为ABC…ABC…@CharlesDuffy谢谢,我编辑了我的答案