Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

zsh : variables et globbing

2 réponses
Avatar
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.

2 réponses

Avatar
Vincent Lefevre
Dans l'article <fnbatn$1uvp$,
mpg écrit:

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 - Web: <http://www.vinc17.org/&gt;
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/&gt;
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)

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

Dans l'article <fnbatn$1uvp$,
mpg écrit:
:~/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.