web-dev-qa-db-fra.com

Comment utiliser les expressions régulières dans les scripts bash?

Je veux vérifier si une variable a une année valide en utilisant une expression régulière. Lire le manuel bash Je comprends que je pourrais utiliser l'opérateur = ~

En regardant l'exemple ci-dessous, je m'attendrais à voir "pas OK" mais je vois "OK". Qu'est-ce que je fais mal?

i="test"
if [ $i=~"200[78]" ]
then
  echo "OK"
else
  echo "not OK"
fi
82
idrosid

Il a été changé entre 3.1 et 3.2:

Ceci est une description succincte des nouvelles fonctionnalités ajoutées à bash-3.2 depuis la publication de bash-3.1.

Le fait de citer l'argument de chaîne à l'opérateur [[de la commande = ~ oblige maintenant la correspondance de chaîne, comme pour les autres opérateurs de correspondance de modèle.

Donc utilisez-le sans les guillemets ainsi:

i="test"
if [[ $i =~ 200[78] ]] ; then
    echo "OK"
else
    echo "not OK"
fi
115
paxdiablo

Vous avez besoin d'espaces autour de l'opérateur = ~

 i = "test" 
 si [[$ i = ~ "200 [78]"]; 
, alors 
 renvoie "OK" 
 else 
 écho "pas OK" 
 fi 
8
michiel