Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

diff entre deux variables

8 réponses
Avatar
Philippe Naudin
Bonjour,

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

une_commande "$V1" "$V2"

Je peux bien s=FBr me d=E9brouiller en =E9crivant une variable, du genre :
echo "$V1" > /dev/shm/V1=20
# en utilisant mktemp, mais c'est l'id=E9e qui compte ici...
diff /dev/shm/V1 - <<< "$V2"=20
rm /dev/shm/V1

mais y a t'il une solution plus =E9l=E9gante ?

Merci pour vos lumi=E8res !

--=20
Philippe

8 réponses

Avatar
Nicolas George
Philippe Naudin , dans le message , a
écrit :
echo "$V1" > /dev/shm/V1



C'est /tmp qui sert à ça, pas /dev/shm.
Avatar
Damien Wyart
* Philippe Naudin <p.naudin+ in fr.comp.os.unix:
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
Avatar
Nicolas George
Damien Wyart , dans le message <4db84c57$0$4882$,
a écrit :
Je propose :
diff <(echo $V1) <(echo $V2)



Pas portable. Et ton usage d'echo est risqué, mais c'est une autre histoire.
Avatar
Damien Wyart
* Nicolas George <nicolas$ in fr.comp.os.unix:
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
Avatar
Philippe Naudin
Le mer 27 avr 2011 19:38:06 CEST, Damien Wyart a écrit:

* Nicolas George <nicolas$ in fr.comp.os.unix:
> 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
Avatar
Nicolas George
Philippe Naudin , dans le message , a
é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.
Avatar
Philippe Naudin
Le mer 27 avr 2011 19:05:22 CEST, Nicolas George a écrit:

Philippe Naudin , dans le message , a
é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
Avatar
Philippe Naudin
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