bash: for ループが反復処理時にファイルをソートする方法

bash: for ループが反復処理時にファイルをソートする方法

forディレクトリ内のファイルを一覧表示する際のソートに関して、ループのデフォルトの動作は何ですか?

例えば

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

これはどこかに文書化されていますか?

答え1

man bashの「パス名拡張」のセクションによると:

これらの文字のいずれかが出現した場合、その単語はパターンとみなされ、アルファベット順パターンに一致するファイル名のリスト […]

このソートは次の値に依存します$LC_COLLATE:

この変数は、パス名展開の結果をソートするときに使用する照合順序を決定します […]

上記からわかるように、これはループとは何の関係もありませんfor。グロブはさまざまな方法で使用でき、その展開は常にソートされます。

答え2

forループはソートせず、提示された順序どおりに値を返します。

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

一方、グロブは、 内forまたは他の場所で使用するかどうかに関係なく、アルファベット順に並べ替えられます。

$ touch b a c
$ echo *
a b c

関連情報