83 votes

Comment puis-je utiliser des expressions régulières dans des scripts bash?

Je veux vérifier si une variable est valable un an à l'aide d'une expression régulière. La lecture du manuel de bash , je comprends que je pouvais utiliser l'opérateur =~

En regardant l'exemple ci-dessous, je m'attends à voir "pas OK", mais je vois "OK". Ce que je fais mal?

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

116voto

paxdiablo Points 341644

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

C'est un laconique description des nouvelles fonctionnalités ajoutées à bash-3.2 depuis la version de bash-3.1.

Citant la chaîne argument de la [[ commande =~ exploitant les forces de correspondance de chaîne, comme avec les autres "pattern-matching" des opérateurs.

Afin de l'utiliser sans les guillemets donc:

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

8voto

michiel Points 79

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

j'="test"
if [[ $i =~ "200[78]" ]];
alors
 echo "OK"
d'autre
 echo "pas OK"
fi

0voto

Chris Kimpton Points 2916

Pourrait-il être vous avez besoin de guillemets autour de $i ?

Cet exemple n'est qu'.

Il mentionne également Bash v3 - mais je suppose que vous utilisez...

0voto

unwind Points 181987

Cet article utilise des doubles crochets, et un point-virgule avant la then. Je suis assez sûr que ce dernier n'est pas nécessaire lorsque vous avez un saut de ligne, cependant. Mais essayez de changer vos supports de.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X