Dans l'article <fqf0ne$d18$1@news.tiscali.fr>,
Cornillet Pascal <p.cornillet@laposte.net> écrit:
Mais dans mon cas certains arguments doivent être modifiés avec sed,
d'où le problème ci-dessous :
./count.sh `echo foo | sed -e 's/foo/"a a"/g'`
2
Ici on vois bien que les guillemets double ont disparues,
Ils n'ont pas disparu:
$ for i in `echo foo | sed -e 's/foo/"a a"/g'`; do echo ".$i."; done
.."a.
..a".
C'est simplement le word splitting de sh. Pour supprimer le
word splitting, il suffit de mettre des guillemets:
$ for i in "`echo foo | sed -e 's/foo/"a a"/g'`"; do echo ".$i."; done
.."a a".
ou de redéfinir la variable IFS:
$ IFS=
$ for i in `echo foo | sed -e 's/foo/"a a"/g'`; do echo ".$i."; done
.."a a".
Ou si tu veux splitter sur un autre caractère:
$ IFS=a
$ for i in `echo foo | sed -e 's/foo/"a a"/g'`; do echo ".$i."; done
..".
.. .
..".
En revanche, si tu veux splitter sur certains espaces mais pas sur
d'autres dans la même chaîne, c'est impossible: il faut contourner
le problème d'une manière ou d'une autre. De toute façon, le word
splitting, c'était une mauvaise idée. En cela, zsh est bien meilleur.
--
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)