Come utilizzare la sostituzione dei parametri nel modello glob (zsh)


8

Voglio elaborare un mucchio di file che terminano con alcuni suffissi, quindi ho scritto il seguente script zsh ma non ha funzionato.

EXT=(.jpg .png .gif)
EXT=${(j.|.)EXT}    # EXT becomes '.jpg|.png|.gif'
for f in *($EXT); do     # should become '*(.jpg|.png|.gif)' but failed
    process-one-file $f
done

Perché non funziona? Come posso mescolare la sostituzione dei parametri e il modello glob?

Risposte:


10

Non funziona perché in zsh, il globbing non viene eseguito di default in caso di espansione variabile. Ecco perché in zshte puoi fare:

rm -- $file

In altre shell, hai bisogno di:

rm -- "$file"

Se vuoi perdere tempo, devi richiederlo esplicitamente come in:

rm -- $~file_pattern

Nel tuo caso:

for f (*($~EXT)) process-one-file $f

(nota che per convenzione tendiamo ad usare nomi di variabili maiuscole per variabili d'ambiente)

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.