Argumentsequenz generieren, die an ein Programm übergeben werden soll?

8

Ich verwende derzeit eine Kombination aus geschweiften Klammern und Globing, um mehrere Dateien gleichzeitig in vlc abzuspielen:

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

Aber die Zahlen sind immer in voller Reihenfolge, gibt es eine Möglichkeit, es irgendwie ein bisschen einfacher zu spezifizieren, vielleicht so etwas

vlc K20-{06-17}*

? Vielleicht seqirgendwie benutzen ?

ich kann nutzen

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

aber das scheint das nicht zu erweitern *. Irgendwie darum herum?

grauer Wolf
quelle
7
Die Syntax für einen {m..n}K20-{06..17}*
Klammererweiterungsbereich

Antworten:

13

Wie @steeldriver bemerkt, K20-{06..17}*deckt es ab.

Beispiel mit einem echofür Test / Validierung:

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

Das *wird auch erweitert, wenn es Dateien gibt, die dem Namen im aktuellen Arbeitsverzeichnis entsprechen.

So vlc K20-{06..17}*erreichen Sie, was Sie wollen.

Weitere Informationen zur Bash-Erweiterung finden Sie im GNU Bash-Referenzhandbuch - Klammererweiterung . Oder man bashlesen Sie:

Ein Sequenzausdruck hat die Form {x..y [.. incr]}, wobei x und y entweder Ganzzahlen oder einzelne Zeichen sind und incr, ein optionales Inkrement, eine Ganzzahl ist.

Damit:

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