J'utilise SH Shell et j'essaie de comparer une chaîne avec la valeur d'une variable, mais la condition if
est toujours exécutée sur true. Pourquoi?
Voici du code:
Sourcesystem="ABC"
if [ "$Sourcesystem" -eq 'XYZ' ]; then
echo "Sourcesystem Matched"
else
echo "Sourcesystem is NOT Matched $Sourcesystem"
fi;
echo Sourcesystem Value is $Sourcesystem ;
Même cela ne fonctionne pas:
Sourcesystem="ABC"
if [ 'XYZ' -eq "$Sourcesystem" ]; then
echo "Sourcesystem Matched"
else
echo "Sourcesystem is NOT Matched $Sourcesystem"
fi;
echo Sourcesystem Value is $Sourcesystem ;
Deuxièmement, pouvons-nous faire correspondre cela avec une chaîne NULL ou vide?
Vous devez utiliser l'opérateur =
pour la comparaison de chaînes:
Sourcesystem="ABC"
if [ "$Sourcesystem" = "XYZ" ]; then
echo "Sourcesystem Matched"
else
echo "Sourcesystem is NOT Matched $Sourcesystem"
fi;
man test
indique que vous utilisez -z
pour faire correspondre les chaînes vides.
-eq
est utilisé pour comparer des entiers. Utilisez =
à la place.
eq est utilisé pour comparer des entiers, utilisez plutôt '=', par exemple:
if [ 'AAA' = 'ABC' ];
then
echo "the same"
else
echo "not the same"
fi
bonne chance
J'ai eu le même problème, fais ça
if [ 'xyz' = 'abc' ];
then
echo "match"
fi
Remarquez les espaces. Dans ce cas, il est important que vous utilisiez un espace blanc avant et avant le signe =
.
Consultez " Autres opérateurs de comparaison ".
-eq
est l'opérateur de comparaison Shell permettant de comparer des entiers. Pour comparer des chaînes, vous devez utiliser =
.
-eq
est un opérateur de comparaison mathématique. Je ne l'ai jamais utilisé pour la comparaison de chaînes, en m'appuyant sur ==
et !=
pour les comparaisons.
if [ 'XYZ' == 'ABC' ]; then # Double equal to will work in Linux but not on HPUX boxes it should be if [ 'XYZ' = 'ABC' ] which will work on both
echo "Match"
else
echo "No Match"
fi
Sur les 4 shells que j'ai testés, ABC -eq XYZ
est évalué à true dans la variable test
pour zsh
et ksh
. L'expression est évaluée à false sous /usr/bin/test
et aux commandes intégrées pour dash
et bash
. Dans ksh
et zsh
, les chaînes sont converties en valeurs numériques et sont égales puisqu'elles sont toutes deux égales à 0. IMO, le comportement des fonctions intégrées pour ksh
et zsh
est incorrect , mais la spécification pour test
est ambiguë à ce sujet.