$ 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
*1
1
file1
file11
*2
file12
file2
echo
file1
file11
file12
file2
file3
file4
file12
最後に、マニュアルの内容に従っていますが、「引用符の削除」が実際には問題にならない場合 - 拡張プロセスの前に引用文が解析されます。