Echo neden bazı dosyaları iki kez eşleştiriyor?


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

Bunun neden olduğunu anlamıyorum. Lütfen biri açıklayabilir mi?

Yanıtlar:


21

Diş telleri joker karakter desenleri değildir. Kontrol bash açılımları belgeleri : parantez sürecin en başında genişletilir ve joker desenler son step¹ yayılmaktadır.

Başlangıçta, komut iki sözcükten oluşur echo, *{1..12}. Ayracı genişleme sonrasında komut 13 kelime içeriyor: echo, *1, *2, ..., *12. Sonra joker karakter desenleri genişletilir. *1ile biten dosya isimleri listesine genişler, bu dosya 1sadece file1değil aynı zamanda file11(daha sonra sözlükbilim sırasına göre sıralanır) içerir. Aynı şekilde ve (bu sırayla) *2genişler . Alacağınız Yani , , , , tek bir dosya eşleşti ve sonra diğer joker olun: , , ..., .file12file2echofile1file11file12file2file3file4file12

¹ Eğer kılavuzun açıklamasını ancak “alıntı kaldırılmasını” izlerseniz son yanında gerçekten bir şey değildir - tırnak önceki genişleme sürecinin daha çözümlenir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.