¿Generar secuencia de argumento para pasar a un programa?

8

Actualmente estoy usando una combinación de llaves y globing para reproducir múltiples archivos en vlc a la vez:

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

Pero los números son siempre una secuencia completa, ¿hay alguna manera de especificarlo de alguna manera un poco más simple, tal vez algo así como

vlc K20-{06-17}*

? Tal vez usar de seqalguna manera?

Puedo usar

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

pero eso no parece expandir el *. ¿Alguna forma de evitarlo?

Lobo gris
fuente
77
La sintaxis para un rango de expansión de {m..n}K20-{06..17}*
llaves

Respuestas:

13

Como señala @steeldriver, lo K20-{06..17}*cubre.

Ejemplo, usando un echopara prueba / validación:

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

También *se expandirá si hay archivos que coincidan con el nombre en el directorio de trabajo actual.

Así vlc K20-{06..17}*logrará lo que quiere.

Más información sobre la expansión de bash en GNU Bash Reference Manual - Expansión de llaves . O de man bash, lea:

Una expresión de secuencia toma la forma {x..y [.. incr]}, donde x e y son enteros o caracteres individuales, e incr, un incremento opcional, es un entero.

Entonces:

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