2016-05-17 76 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謝謝,我編輯了我的答案 –