Générer une séquence d'arguments à passer à un programme?

8

J'utilise actuellement une combinaison de crochets et de globes pour lire plusieurs fichiers en vlc à la fois:

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

Mais les chiffres sont toujours une séquence complète, existe-t-il un moyen de le spécifier un peu plus simplement, peut-être quelque chose comme

vlc K20-{06-17}*

? Peut-être utiliser en seqquelque sorte?

je peux utiliser

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

mais cela ne semble pas étendre le *. De toute façon?

Loup gris
la source
7
La syntaxe pour une plage d'extension d'accolade est {m..n}- doncK20-{06..17}*
Steeldriver

Réponses:

13

Comme le note @steeldriver, le K20-{06..17}*couvre.

Exemple, en utilisant un echopour test / validation:

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

Le *sera également développé s'il existe des fichiers qui correspondent au nom dans le répertoire de travail actuel.

Ainsi vlc K20-{06..17}*, vous obtiendrez ce que vous voulez.

Plus d'informations sur l'expansion bash dans GNU Bash Reference Manual - Brace Expansion . Ou de man bash, lisez:

Une expression de séquence prend la forme {x..y [.. incr]}, où x et y sont soit des entiers, soit des caractères uniques, et incr, un incrément facultatif, est un entier.

Donc:

$ 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
la source