Quel type de moteur d'expression régulière utilise bash?

12

J'utilise RegEx Buddy pour prototyper et déboguer mes expressions régulières. RegEx Buddy me permet de choisir entre différents types de moteurs d'expression régulière (.NET, Java, Perl, GNU BRE, GNU ERE, POSIX, BRE, POSIX ERE, etc.).

Quel moteur d'expression régulière utilise bash (par exemple dans les instructions ifet case)? J'utilise Centos 5.5 32 bits et bash 3.2.25 (1):

[kevin@mon01 scratch]$ bash --version
GNU bash, version 3.2.25(1)-release (i686-redhat-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.

Je suppose que ce sera GNU BRE ou GNU ERE?

Kev
la source

Réponses:

11

bash (et les shells POSIX en général) n'utilisent pas d'expressions régulières dans l' caseinstruction, mais plutôt des modèles glob .

La prise en charge des expressions régulières à l'aide de l' =~opérateur est limitée ; voir les détails sur: http://mywiki.wooledge.org/BashGuide/Patterns ,
qui indique que bashutilise les expressions régulières étendues (ERE).

Riccardo Murri
la source
Merci. Le deuxième lien mentionne ERE qui, je suppose, est GNU ERE.
Kev
3

Bash n'utilise aucun des types d'expressions régulières ci-dessus dans ifles caseinstructions et.

Au contraire, il utilise des modèles de globes shell, qui sont moins puissants que tout type d'expression régulière. Des versions relativement nouvelles de bash permettent également l'utilisation de modèles glob étendus qui sont expressivement égaux à des expressions régulières sans ancres (en ligne) mais incluant des termes négatifs, mais avec une syntaxe différente de n'importe lequel des types d'expression régulière mentionnés ci-dessus.

Notez cependant que les globs shell étendus doivent être activés avant utilisation avec les shopt -s extglob deux dans un script shell ou de manière interactive.

Dans un seul endroit exceptionnel, à savoir au sein de la [[ ]]commande conditionnelle, la =~relation binaire permet de vérifier une chaîne du côté gauche contre une expression régulière étendue ERE du côté droit.

Franki
la source
0

Selon le guide Bash lié, Bash (depuis la version 3.0+) utilise: "le dialecte de l' expression régulière étendue (ERE) ".

Vous trouverez plus d'informations sur ce dialecte ici .

SkyLeach
la source