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

相關內容