Вам не нужен оператор регулярных выражений для альтернативного сопоставления.Оператор расширенного теста [[
позволяет использовать расширенное сопоставление с шаблоном , используя который вы можете просто сделать ниже.+(pattern-list)
предоставляет способ сопоставления еще одного числа шаблонов, разделенных |
[[ bar == +(foo|bar) ]] && echo match
. Расширенные правила глобализации применяются автоматически, когда ключевое слово [[
используется с оператором ==
.
Что касается части регулярных выражений, то с помощью любой команды, поддерживающей библиотеку ERE, можно просто выполнить чередование с помощью конструкции |
как
[[ bar =~ foo|bar ]] && echo ok
[[ bar =~ ^(foo|bar)$ ]] && echo ok
Что касается вашего регулярного выражения в кавычкахработа заключается в том, что разбор регулярных выражений в bash
изменился между выпусками 3.1 и 3.2.До 3.2 было безопасно свернуть ваш шаблон регулярных выражений в кавычки, но это изменилось в 3.2.С тех пор регулярное выражение всегда должно быть без кавычек.
Вы должны защищать любые специальные символы, экранируя их с помощью обратной косой черты.Лучший способ всегда быть совместимым состоит в том, чтобы поместить свое регулярное выражение в переменную и развернуть эту переменную в [[
без кавычек.Также см. FAQ Чета Рами по Bash, раздел E14 , который очень хорошо объясняет это поведение при цитировании.