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
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
Vous avez besoin d'espaces autour de l'opérateur = ~
i = "test" si [[$ i = ~ "200 [78]"]; , alors renvoie "OK" else écho "pas OK" fi