Comment utiliser la substitution de paramètres dans le modèle glob (zsh)


8

Je veux traiter un tas de fichiers se terminant par quelques suffixes, j'ai donc écrit le script zsh suivant mais cela n'a pas fonctionné.

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

Pourquoi ça ne marche pas? Comment puis-je mélanger la substitution de paramètres et le modèle global?

Réponses:


10

Cela ne fonctionne pas car dans zsh, la globalisation n'est pas effectuée par défaut lors de l'expansion des variables. C'est pourquoi en zshvous pouvez faire:

rm -- $file

Dans d'autres coquilles, vous avez besoin de:

rm -- "$file"

Si vous voulez un globbing, vous devez le demander explicitement comme dans:

rm -- $~file_pattern

Dans ton cas:

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

(notez que par convention, nous avons tendance à utiliser des noms de variables majuscules pour les variables d'environnement)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.