Shell savoir si une chaine contient une variables

julien -  
 julien -
Bonjour a tous ^^

voila je débute en shell et je voudrais savoir comment on peut identifier une variable dans une chaine, par exemple: chaine=azerty variable=y comment savoir si azerty contient y? voila merci d'avance.

5 réponses

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    avec =~
    $ chaine="azerty"
    $ v="y"
    $ [[ "$chaine" =~ "$v" ]] && echo contient || echo ne contient pas
    contient
    $ v="a"
    $ [[ "$chaine" =~ "$v" ]] && echo contient || echo ne contient pas
    contient
    $ v="b"
    $ [[ "$chaine" =~ "$v" ]] && echo contient || echo ne contient pas
    ne contient pas
    $ 
    2
    1. Utilisateur anonyme
       
      salut,

      == peut suffire: l'expression à trouver n'est pas très compliquée
      $ chaine="azerty" 
      $ v="y" 
      $ [[ $chaine == *$v* ]] && echo contient || echo ne contient pas
      même avec =~ (voire surtout avec =~) il ne faut pas mettre les variables entre guillemets.
      0
  2. julien
     
    merci pour cette réponse rapide, mais ça me met "commande introuvable." ne doit ton pas mettre des comparateurs tels que -lt ou -gt lorsqu'il s'agit de chaines?
    0
    1. Utilisateur anonyme
       
      -lt, -gt, etc, sont des opérateurs arithmétiques.
      0
  3. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    ton shell est bien bash ?
    respecter les espaces
    on ne veut pas comparer mais savoir si la chaine contient, d'où le =~
    0
  4. julien
     
    si je met ça [ $chaine =~ $v ] il me dit "opérateur binaire attendu." et si je colle comme ceci [ $chaine=~$v ] il le trouve tout le temps, même lorsque je rentre des chiffres par exemple.(il n'y a que des lettres dans $chaine). avec la syntaxe de qqchquicommenceparQ, il ne trouve jamais le caractère.
    0
    1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      il y a 2 [[ ]] [[ $chaine =~ $v ] ]
      0
    2. julien
       
      au temps pour moi. sa vire l'erreur opérateur, mais du coup il ne trouve pas le caractère.
      0
    3. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      $ chaine="azerty"
      $ v="a"
      $ [[ "$chaine" =~ $v ]] && echo contient || echo ne contient pas
      contient
      $ v="b"
      $ [[ "$chaine" =~ $v ]] && echo contient || echo ne contient pas
      ne contient pas
      $ 
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. julien
     
    bon g trouvé un truc qui fonctionne pour le moment. c avec grep :
    [ $(grep $v <<< $chaine) ]
    0