Shell - comparer chaine de caractère
Résolu
wida
Messages postés
170
Statut
Membre
-
wida Messages postés 170 Statut Membre -
wida Messages postés 170 Statut Membre -
Bonjour,
Dans mon script j'ai deux variables contenant chacune une chaine de caractère.
Pour tester si une chaine est contenu dans une autre j'utiliser la condition suivante :
Mais toutes les deux ne marchent pas même si je suis sur que var1 contient var2.
Quelqu'un a une idée d'ou vient le problème ?
--
Le rêve n'aboutit à rien, l'action à tout.
(J. FIAUX).
Dans mon script j'ai deux variables contenant chacune une chaine de caractère.
Pour tester si une chaine est contenu dans une autre j'utiliser la condition suivante :
if [ "$var1" = "*$var2" ] ou if [ "$var1" = *"$var2" ]
Mais toutes les deux ne marchent pas même si je suis sur que var1 contient var2.
Quelqu'un a une idée d'ou vient le problème ?
--
Le rêve n'aboutit à rien, l'action à tout.
(J. FIAUX).
8 réponses
-
Salut,
Perso j'utiliserai plutôt "grep" et l'analyse du code retour ($?) :
$ A=chaine;B="Ma chaine à moi" $ grep -q "${A}" <<< "${B}" $ echo $? 0 $ A=chaine;B="Ma chaîne à moi" # J'ai modifié le "î" de chaine $ grep -q "${A}" <<< "${B}" $ echo $? 1 $
;-))
-
salut,
si c'est en bash, alorsvar1="foo bar baz" var2="baz" if [[ $var1 == *$var2 ]]; then echo "match"; else echo "no match"; fi
si c'est en shell POSIXif echo "$var1" | grep "$var2" >/dev/null 2>&1; then echo "match"; else echo "no match"; fi
-
Pourquoi les quotes "?
T'as testé avec -eq a la place du = ? -
j'utilise les quotes parce que sans j'ai cette erreur :
unary operator expected
j'ai essayé maintenant avec -eq, sans quote il donne la même erreur que le = et avec il m'affiche cette erreur :integer expression expected
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
ahh c'est un '==' qu'il faut
http://www.tech-recipes.com/rx/209/bournebash-shell-scripts-string-comparison/ -
ça donne pas d'erreur mais pareil que le =, ça marche pas!
je pense que c'est * qui gène ! -
Faudrai faire un grep plutôt
Ou n'importe quel regexp. je crois qu'il y a awk pour ça -