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 :

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

  1. Contributeur
    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
    
    $

    ;-))
    1. Oui voilà, <3 grep , sed & co :P
    2. Merciiii ça marche :DD
  2. salut,

    si c'est en bash, alors
    var1="foo bar baz" var2="baz"                                                                                                        
    if [[ $var1 == *$var2 ]]; then echo "match"; else echo "no match"; fi

    si c'est en shell POSIX
    if echo "$var1" | grep "$var2" >/dev/null 2>&1; then echo "match"; else echo "no match"; fi
    1. 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 
      1. ahh c'est un '==' qu'il faut

        http://www.tech-recipes.com/rx/209/bournebash-shell-scripts-string-comparison/
        1. ça donne pas d'erreur mais pareil que le =, ça marche pas!
          je pense que c'est * qui gène !
          1. Faudrai faire un grep plutôt

            Ou n'importe quel regexp. je crois qu'il y a awk pour ça