Re: bash et expression régulière

Page principale

Répondre à ce message
Auteur: Frédéric BOITEUX
Date:  
À: guilde
Sujet: Re: bash et expression régulière
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.