Hasilkan urutan argumen untuk diteruskan ke program?

8

Saat ini saya menggunakan kombinasi kurung keriting dan globing untuk memutar beberapa file dalam vlc sekaligus:

vlc K20-{06,07,08,09,10,11,12,13,14,15,16,17}*

Tapi angkanya selalu penuh, apakah ada cara untuk menentukannya sedikit lebih sederhana, mungkin seperti itu

vlc K20-{06-17}*

? Mungkin menggunakan seqentah bagaimana?

Saya bisa menggunakan

   $ echo K20-{$(seq -s, -f "%02.0f" 06 17)}*
K20-{06,07,08,09,10,11,12,13,14,15,16,17}*

tapi itu tampaknya tidak memperluas *. Ada jalan lain?

Serigala abu-abu
sumber
7
Sintaks untuk rentang ekspansi brace adalah {m..n}- jadiK20-{06..17}*
steeldriver

Jawaban:

13

Seperti dicatat oleh @steeldriver, tutuplah K20-{06..17}*.

Contoh, menggunakan echouji / validasi:

$ echo vlc K20-{06,07,08,09,10,11,12,13,14,15,16,17}*
vlc K20-06* K20-07* K20-08* K20-09* K20-10* K20-11* K20-12* K20-13* K20-14* K20-15* K20-16* K20-17*
$ echo vlc K20-{06..17}*
vlc K20-06* K20-07* K20-08* K20-09* K20-10* K20-11* K20-12* K20-13* K20-14* K20-15* K20-16* K20-17*

The *akan diperluas juga jika ada file yang cocok dengan nama di direktori kerja saat ini.

Jadi vlc K20-{06..17}*akan mencapai apa yang Anda inginkan.

Informasi lebih lanjut tentang ekspansi bash di Manual Referensi Bash GNU - Brace Expansion . Atau dari man bash, baca:

Ekspresi urutan mengambil bentuk {x..y [.. incr]}, di mana x dan y adalah bilangan bulat atau karakter tunggal, dan incr, kenaikan opsional, adalah bilangan bulat.

Begitu:

$ echo K20-{06..10}
K20-06 K20-07 K20-08 K20-09 K20-10

$ echo K20-{06..10..2}
K20-06 K20-08 K20-10
steve
sumber