Shell - comparer chaine de caractère
Résolu
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
-
ContributeurSalut,
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
-
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 -
Merci à tous pour votre aide :)