2016-05-17 112 views
2

比方说,我有一个在bash的循环看起来像这样:bash for循环中的迭代次序是否有保证?

for i in $MYDIR/*.jar 
do 
    # do something with files 
done 

是保证迭代的顺序,即会在循环总是在相同的顺序处理的文件?如果有保证,订单是否按字母顺序排列?

+3

我相信这适用于:http://serverfault.com/a/122743/1239 –

+1

顺便说一句,这不是一个关于循环的问题,这是一个关于globs的问题。因为我在9 5 3;做回声“$我”;完成“将按照该顺序进行操作。 –

+2

你在问错误的问题。这不是扩展你的*的循环。 shell将首先将* .jar扩展为文件列表,然后循环将遍历该文件列表。 – hymie

回答

1

按照bash man page

路径名扩展

字分开后,除非-f选项已定,庆典扫描 每个字的字符*,和[?如果出现其中一个字符 ,则该单词被视为一个模式,并替换为与该模式匹配的按字母顺序排列的文件名列表(请参见下面的 模式匹配)。

因此,这些文件将在字母顺序(这取决于您的语言环境,见注释)由于通配符扩展规则进行处理。

+2

如果您的语言环境为C,则只能使用ASCII顺序。“按字母顺序排序”通常不表示ASCII。 –

+0

...例如,一些语言环境具有AaBbCc的整理顺序...对于其他人,它是ABC ... abc ... –

+0

@CharlesDuffy谢谢,我编辑了我的答案 –