zsh : variables et globbing

Le
mpg
Bonjour,

J'ai du mal à comprendre le comportement suivant, sous zsh. Je cherche à
générer un tableau contenant les fichiers ayant leur extensions dans une
liste donnée. Pour fixer les idées, je pars dans un répertoire comme ça :

mpg@siegel:~/tmp/test% ls
truc.aux truc.log truc.tex truc.pdf

Je peux facilement récupérer les noms des fichiers intermédiaires :

mpg@siegel:~/tmp/test% liste=( *.(aux|log) )
mpg@siegel:~/tmp/test% echo $liste
truc.aux truc.log

Mais j'aimerais pouvoir mettre la liste des extensions à utiliser dans une
variable séparée, et là ça se gâte :

mpg@siegel:~/tmp/test% ext='(aux|log)'
mpg@siegel:~/tmp/test% liste=( *.$ext )
zsh: no matches found: *.(aux|log)

Je me dis alors que peut-être zsh n'aime pas faire du globbing sur des trucs
issus d'une variable, mais on dirait que ça marche si je fais des trucs
plus simples avec une variable aussi :

mpg@siegel:~/tmp/test% ext='aux'
mpg@siegel:~/tmp/test% liste=( *.$ext )

Du coup je suis un peu perplexe.

Pouvez-vous m'aider à comprendre ce qui se passe ici ?


Manuel.
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Vincent Lefevre
Le #800446
Dans l'article mpg
Mais j'aimerais pouvoir mettre la liste des extensions à utiliser dans une
variable séparée, et là ça se gâte :

:~/tmp/test% ext='(aux|log)'
:~/tmp/test% liste=( *.$ext )
zsh: no matches found: *.(aux|log)

Je me dis alors que peut-être zsh n'aime pas faire du globbing sur des trucs
issus d'une variable, mais on dirait que ça marche si je fais des trucs
plus simples avec une variable aussi :

:~/tmp/test% ext='aux'
:~/tmp/test% liste=( *.$ext )


Parce que le problème vient des caractères spéciaux ( | ) qui ne sont
pas interprétés par défaut (c'est ce qu'on veut généralement). Il faut
que tu actives le GLOB_SUBST:

echo *.${~ext}

--
Vincent Lefèvre 100% accessible validated (X)HTML - Blog: Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)

mpg
Le #800232
Le (on) vendredi 25 janvier 2008 02:01, Vincent Lefevre a écrit (wrote) :

Dans l'article mpg
:~/tmp/test% ext='(aux|log)'
:~/tmp/test% liste=( *.$ext )
zsh: no matches found: *.(aux|log)


Parce que le problème vient des caractères spéciaux ( | ) qui ne sont
pas interprétés par défaut (c'est ce qu'on veut généralement). Il faut
que tu actives le GLOB_SUBST:

echo *.${~ext}

Oki, ça répond très précisément à ma question. Merci beaucoup !


Manuel.


Publicité
Poster une réponse
Anonyme