Le mer 13 sep 2006 03:05:02 CEST, "anne aublanc"
<anne.aublanc@???> a écrit :
> bonjour,
>
> j'aimerais avoir cela ab\$cd\$e en partant de ab$cd$e dans une variable (titi)
>
> en ligne de cde :
> user_shadow1='ab$cd$e'; echo $user_shadow1 | sed -e s/\\$/\\\\\$/g
> ab\$cd\$e
>
> user_shadow1='ab$cd$e'; titi=`echo $user_shadow1 | sed -e s/\\$/\\\\\$/g`; echo $titi
> ab$cd$e$
>
> Si vous pouvez m'expliquer le problème...
>
> j'aimerais beaucoup que titi = ab\$cd\$e
>
> merci
> anne
>
Bonjour,
extrait de la page de manuel :
Quand l'ancienne forme de substitution avec les backquotes ` est
utilisée, le caractère antislash garde sa signification littérale, sauf
s'il est suivi de $, `, ou \. La première backquote non protégée par
un antislash termine la substitution de commande. Quand on utilise la
forme $(commande), tous les caractères entre parenthèses gardent leurs
valeurs littérales. Aucun n'est traité spécialement.
Donc ton expression s/\\$/\\\\\$/g n'est plus valable dans ce contexte. De toute façon, elle n'est pas très lisible !
tu pourrais écrire :
user_shadow1='ab$cd$e'; titi=`echo "$user_shadow1" | sed -e 's/\\$/\\\\$/g'` ; echo $titi
[ une anti-quote de moins ]
ou plus lisible :
user_shadow1='ab$cd$e'; titi=$(echo $user_shadow1 | sed -e 's/\$/\\$/g') ; echo $titi
Fred.