Dans l'article <fqh832$sev$1@news.tiscali.fr>,
Cornillet Pascal <p.cornillet@laposte.net> écrit:
voici le hack que j'ai mis dans mon Makefile :
rule:
IFS=^ ; \
cmd arg1 arg2 \
`lib-config --cflags | sed \
-e 's/ /^/g' \
-e 's/-optx/-arg3^-optx/g' \
-e 's/-framework^Cocoa/-arg4^"-framework Cocoa"/g'`
ce qui m'étonne c'est que le "word-spliting" reste sur l'espace hors
du sous-shell, et que l'action de IFS n'interagisse que dans le
sous-shell.
Je ne comprends pas bien ce que tu veux dire. La variable IFS n'est
prise en compte que dans certains cas particuliers, par exemple pour
la substitution de commande[*]. Mais sinon, elle reste active dans
les sous-shells (i.e. elle n'est pas remise à sa valeur par défaut):
sh-3.1$ IFS=:
sh-3.1$ echo `echo ab:cd; for i in \`echo ab:cd\`; do echo $i; done`
ab cd
ab
cd
sh-3.1$
C'est peut-être un peu plus clair avec la forme suivante:
sh-3.1$ echo $(echo ab:cd; for i in $(echo ab:cd); do echo $i; done)
ab cd
ab
cd
sh-3.1$
Le \`echo ab:cd\` ou $(echo ab:cd) est remplacé par les deux mots:
ab cd et non par ab:cd
i.e.
sh-3.1$ echo `echo ab:cd; for i in ab cd; do echo $i; done`
ab cd
ab
cd
sh-3.1$
et non:
sh-3.1$ echo `echo ab:cd; for i in ab:cd; do echo $i; done`
ab cd
ab cd
sh-3.1$
[*]
http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_06_03
Je n'arrive pas à comprendre la logique de ce comportement,
mais bon lol ça fonctionne...
Merci beaucoup !
Maintenant, ça ne fonctionnera que si tu n'as pas de '^' dans tes noms
de fichiers. Pour un truc complètement robuste, il faut probablement
passer par un autre langage (e.g. Perl), ou peut-être zsh.
--
Vincent Lefèvre <vincent@vinc17.org> - Web: <
http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <
http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)