Pourquoi BASH_REMATCH ne fonctionne pas pour une expression régulière entre guillemets?
Le code ressemble à ceci:
#!/bin/bash
if [[ foobarbletch =~ 'foo(bar)bl(.*)' ]]
then
echo "The regex matches!"
echo $BASH_REMATCH
echo ${BASH_REMATCH[1]}
echo ${BASH_REMATCH[2]}
fi
Quand j'essaie de le lancer, il n'a pas d'afficher quoi que ce soit:
bash-3.2$ bash --version
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin12)
Copyright (C) 2007 Free Software Foundation, Inc.
bash-3.2$ /bin/bash test_rematch.bash
bash-3.2$
Quelqu'un aurait-il des idées à ce sujet?
source d'informationauteur Hanfei Sun
Vous devez vous connecter pour publier un commentaire.
Dans votre bash REGEX, vous devez supprimer les guillemets. C'est pourquoi cela ne fonctionne pas.
Si vous avez de l'espace, je vous recommande d'utiliser de cette façon :
Vous pouvez également attribuer le prix de la regexp à une variable:
Ce n'est pas seulement compatible avec le simple citant, mais donne la regexp un nom qui peut aider à la lisibilité.
Merci pour votre instruction de débogage,
echo The regex matches!
vous devriez avoir remarqué il n'y a pas de problème avecBASH_REMATCH
depuis l'instruction if évalue àfalse
.En bash, les expressions régulières utilisées avec
=~
sont non cotées. Si la chaîne sur le droit de cité, il est traité comme une chaîne littérale.Si vous souhaitez inclure des espaces dans votre regex, puis utilisez le caractère approprié des classes, ou d'échapper à votre espace si vous voulez un espace.