一部のファイルでエコーが2回一致するのはなぜですか?


11
$ 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

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

回答:


21

ブレースはワイルドカードパターンではありません。bash展開ドキュメントを確認してください。中かっこはプロセスの非常に早い段階で展開され、ワイルドカードパターンは最後のステップで展開されます¹。

最初、コマンドは、の2つの単語echoで構成されています*{1..12}。ブレース展開した後、コマンドが13個の単語が含まれていますecho*1*2、...、 *12。次に、ワイルドカードパターンが展開されます。*1で終わるファイル名のリストに展開されます1。これには、(辞書式順序で後でソートされる)だけでなくfile1、それも含まれfile11ます。同様*2file12and に展開されますfile2(この順序で)。取得あなたはそうechofile1file11file12file2、および単一のファイルにマッチした、他のワイルドカード:file3file4、...、 file12

¹ 最後に、マニュアルの説明に従いますが、「引用の削除」は実際には重要ではありません。引用は展開プロセスよりも前に解析されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.