diff entre deux variables

Le
Philippe Naudin
Bonjour,

Je cherche comment faire un diff entre deux variables, quelque chose
comme :
V1="une
chaine"
V2="une
autre
chaine"

une_commande "$V1" "$V2"

Je peux bien sûr me débrouiller en écrivant une variable, du genre :
echo "$V1" > /dev/shm/V1
# en utilisant mktemp, mais c'est l'idée qui compte ici
diff /dev/shm/V1 - <<< "$V2"
rm /dev/shm/V1

mais y a t'il une solution plus élégante ?

Merci pour vos lumières !

--
Philippe
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Nicolas George
Le #23314431
Philippe Naudin , dans le message écrit :
echo "$V1" > /dev/shm/V1



C'est /tmp qui sert à ça, pas /dev/shm.
Damien Wyart
Le #23314481
* Philippe Naudin
Je cherche comment faire un diff entre deux variables, quelque chose
comme :
V1="une
chaine"
V2="une
autre
chaine"

une_commande "$V1" "$V2"



Je propose :

diff <(echo $V1) <(echo $V2)

je ne sais pas si c'est améliorable ou si ça peut avoir des
inconvénients, mais cela devrait fonctionner.

--
DW
Nicolas George
Le #23314471
Damien Wyart , dans le message a écrit :
Je propose :
diff <(echo $V1) <(echo $V2)



Pas portable. Et ton usage d'echo est risqué, mais c'est une autre histoire.
Damien Wyart
Le #23314571
* Nicolas George
Pas portable. Et ton usage d'echo est risqué, mais c'est une autre
histoire.



Je me doutais que c'était pas super propre...

Donc pas de solution sans fichier(s) temporaire(s) ?

--
DW
Philippe Naudin
Le #23314641
Le mer 27 avr 2011 19:38:06 CEST, Damien Wyart a écrit:

* Nicolas George > Pas portable. Et ton usage d'echo est risqué, mais c'est une autre
> histoire.

Je me doutais que c'était pas super propre...

Donc pas de solution sans fichier(s) temporaire(s) ?



Pourtant, ce diff me plaît beaucoup, merci Damien ! J'ai juste
protégé les variables pour conserver les sauts de ligne :
diff <(echo "$V1") <(echo "$V2")

Quels sont les risques, et n'y a t'il vraiment pas moyen de s'en
prémunir ?

--
Philippe
Nicolas George
Le #23314811
Philippe Naudin , dans le message écrit :
Quels sont les risques,



S'il y a des backslashes dans la chaîne ou un tiret au début, le
comportement d'echo n'est pas spécifié.

et n'y a t'il vraiment pas moyen de s'en
prémunir ?



Utiliser printf.
Philippe Naudin
Le #23315001
Le mer 27 avr 2011 19:05:22 CEST, Nicolas George a écrit:

Philippe Naudin , dans le message écrit :
> Quels sont les risques,

S'il y a des backslashes dans la chaîne ou un tiret au début, le
comportement d'echo n'est pas spécifié.



Vu !

> et n'y a t'il vraiment pas moyen de s'en
> prémunir ?

Utiliser printf.



OK, merci bien. J'en suis arrivé là dans mes essais :
diff <(printf "%sn" "$V1") <(printf "%sn" "$V2")

J'ai loupé quelque chose ?


--
Philippe
Philippe Naudin
Le #23317131
Le mer 27 avr 2011 23:42:55 CEST, Cyrille Lefevre a écrit:

Le 27/04/2011 21:43, Philippe Naudin a écrit :
> Le mer 27 avr 2011 19:05:22 CEST, Nicolas George a écrit:

> OK, merci bien. J'en suis arrivé là dans mes essais :
> diff<(printf "%sn" "$V1")<(printf "%sn" "$V2")
>
> J'ai loupé quelque chose ?

non, mais un cmp -s doit suffire, non ? :-)



Ah mais non, je *veux* voir les différences ! Et :

V1="une
chaine"
V2="une
autre
chaine"
cmp <(printf "%sn" "$V1") <(printf "%sn" "$V2")

renvoie un pas très informatif :
/dev/fd/63 /dev/fd/62 sont différents: octet 5, ligne 2

(ou alors c'était une blague et j'ai vraiment loupé quelque chose !)

--
Philippe
Publicité
Poster une réponse
Anonyme