echoがいくつかのファイルを2回一致させるのはなぜですか?

echoがいくつかのファイルを2回一致させるのはなぜですか?
$ touch file{1..12}

$ echo *e{1..12}
file1 file2 file3 file4 file5 file6 file7 file8 file9 file10 file11 file12

$ echo *{1..12}
file1 file11 file12 file2 file3 file4 file5 file6 file7 file8 file9 file10 file11 file12

なぜこれが起こるのかわかりません。誰かがこれを説明してもらえますか?

ベストアンサー1

中括弧はワイルドカードパターンではありません。調査するBash 拡張に関するドキュメント:中括弧はプロセスの最初に拡張され、ワイルドカードパターンは最後のステップで拡張されます。

最初に、コマンドは2つの単語で構成されていましたecho*{1..12}中括弧が拡張された後、コマンドにはecho、、、、… 、13の単語が含まれています。次に、ワイルドカードパターンを展開します。で終わるファイル名のリストに展開されます。これには、以下を含めるだけでなく、インクルードも含まれます(後でアルファベット順にソートされます)。また、(順番に)に拡張されます。したがって、、、、、、、および個々のファイルに一致する追加のワイルドカード(、、、...、)が得られます。*1*2*12*11file1file11*2file12file2echofile1file11file12file2file3file4file12

最後に、マニュアルの内容に従っていますが、「引用符の削除」が実際には問題にならない場合 - 拡張プロセスの前に引用文が解析されます。

おすすめ記事