Generare una sequenza di argomenti da passare a un programma?


8

Attualmente sto usando una combinazione di parentesi graffe e globing per riprodurre più file in vlc contemporaneamente:

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

Ma i numeri sono sempre in sequenza completa, c'è un modo per specificarlo in qualche modo un po 'più semplice, forse qualcosa di simile

vlc K20-{06-17}*

? Forse usare in seqqualche modo?

posso usare

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

ma questo non sembra espandere il *. Qualche modo per aggirarlo?


7
La sintassi per un intervallo di espansione del controvento è {m..n}- quindiK20-{06..17}*
steeldriver l'

Risposte:


13

Come osserva @steeldriver, lo K20-{06..17}*copre.

Esempio, usando un echotest / validazione:

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

Il *sarà ampliato e se non ci sono i file che corrispondono al nome nella directory di lavoro attuale.

Quindi vlc K20-{06..17}*raggiungerai quello che vuoi.

Maggiori informazioni sull'espansione di bash nel Manuale di riferimento di GNU Bash - Brace Expansion . O da man bash, leggi:

Un'espressione di sequenza assume la forma {x..y [.. incr]}, dove xey sono numeri interi o singoli caratteri e incr, un incremento facoltativo, è un numero intero.

Così:

$ 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.