©
. Document créé le 13 septembre 2010 , mis à jour le 13 septembre 2010.Un seul arbre qui tombe fait plus de bruit qu'une forêt qui pousse. Proverbe africain
Accueil du site > Astuces > Unix > Comparaison de chaines
Sous le shell le plus primitif (primaire ?) qu’il puisse exister : /bin/sh, la comparaison de chaines de caractères donne t’elle le même résultat quelque soit le système utlisé ? Rien n’est moins sûr.
Le résultat est même parfois bien surprenant !
En général, le test d’égalité est du style : $a = $b
Quelques exemples sur la toile - souvent fort bien documentés - précisent même que l’opérateur de comparaison peut être == et que la comparaison multiple - deux comparaisons chainées - peut être utilisée sans risque.
Juste pour tester quelques tests proposés çà et là, six méthodes de comparaison de chaînes, identiques dans le principe et qui devraient donner le même résultat :
#!/bin/sh
uname -sr
T="ici"
V="la"
if [ "$T" = "ici" ]; then
if [ "$V" = "la" ]; then
echo "$T et $V"
fi
fi
if [[ "$T" = "ici" && "$V" = "la" ]]; then
echo "$T et $V"
fi
if [ "$T" = "ici" ] && [ "$V" = "la" ]; then
echo "$T et $V"
fi
if [ "$T" == "ici" ]; then
if [ "$V" == "la" ]; then
echo "$T et $V"
fi
fi
if [[ "$T" == "ici" && "$V" == "la" ]]; then
echo "$T et $V"
fi
if [ "$T" == "ici" ] && [ "$V" == "la" ]; then
echo "$T et $V"
fi
Et voici quelques résultats obtenus :
FreeBSD 7.0-RELEASE-p11
ici et la
[[: not found
ici et la
[: ici: unexpected operator
[[: not found
[: ici: unexpected operator
Darwin 10.4.0
ici et la
ici et la
ici et la
ici et la
ici et la
ici et la
Linux 2.6.18.8-xenU
ici et la
ici et la
ici et la
ici et la
ici et la
ici et la
Ce billet n’est pas une révolution. Nombreux sont ceux qui connaissent ce genre de .... comportement.
Et peut-être n’est-ce pas inutile de le rappeler.
Les forums sont fermés.