
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