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.



A voir également:

5 réponses

dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 636
 
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
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
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
Utilisateur anonyme
 
-lt, -gt, etc, sont des opérateurs arithmétiques.
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 636
 
ton shell est bien bash ?
respecter les espaces
on ne veut pas comparer mais savoir si la chaine contient, d'où le =~
0
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
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 636
 
il y a 2 [[ ]] [[ $chaine =~ $v ] ]
0
julien
 
au temps pour moi. sa vire l'erreur opérateur, mais du coup il ne trouve pas le caractère.
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 636
 
$ 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

Vous n’avez pas trouvé la réponse que vous recherchez ?

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