Какой тип механизма регулярных выражений использует bash?


12

Я использую RegEx Buddy для создания прототипа и отладки своих регулярных выражений. RegEx Buddy позволяет мне выбирать между несколькими различными типами движка регулярных выражений (.NET, Java, Perl, GNU BRE, GNU ERE, POSIX, BRE, POSIX ERE и т. Д.).

Какой механизм регулярных выражений использует bash (например, в операторах ifand case)? Я использую Centos 5.5 32 бит и 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.

Я предполагаю, что это будет GNU BRE или GNU ERE?

Ответы:


11

bash (и оболочки POSIX в целом) не используют регулярные выражения в caseвыражении, а используют шаблоны glob .

Ограниченная поддержка регулярных выражений с использованием =~оператора; подробности см. по адресу: http://mywiki.wooledge.org/BashGuide/Patterns ,
где говорится, что bashиспользуются расширенные регулярные выражения (ERE).


Спасибо. Вторая ссылка упоминает ERE, которая, как я предполагаю, является GNU ERE.
Кев

3

Bash не использует какие - либо из перечисленных выше видов регулярных выражений в ifи caseотчетности.

Скорее, он использует шаблоны глобуса оболочки, которые менее мощны, чем любые регулярные выражения. Относительно новые версии bash также позволяют использовать расширенные шаблоны glob, которые явно равны регулярным выражениям без (строковых) якорей, но включают в себя отрицательные термины, но с синтаксисом, отличным от любого из вышеупомянутых типов регулярных выражений.

Однако обратите внимание, что расширенные глобусы оболочки должны быть включены перед использованием shopt -s extglob как в сценарии оболочки, так и в интерактивном режиме.

В единственном исключительном месте, а именно в [[ ]]условной команде, =~двоичное отношение позволяет проверять строку с левой стороны по сравнению с расширенным регулярным выражением ERE с правой стороны.


0

Согласно связанному руководству по Bash, Bash (начиная с версии 3.0+) использует: « диалект расширенного регулярного выражения (ERE) ».

Больше информации об этом диалекте можно найти здесь .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.