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 !
Exemple sur le test d’égalité de chaînes de caractères
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"
fiEt 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 operatorDarwin 10.4.0
ici et la
ici et la
ici et la
ici et la
ici et la
ici et laLinux 2.6.18.8-xenU
ici et la
ici et la
ici et la
ici et la
ici et la
ici et laCe 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.