Я хочу, чтобы foo()
соответствовал расширенному регулярному выражению или подобно раскрытие скобок.
Решение на основе egrep
:
foo()
{
egrep -sq "$2" <<< "$1" && echo "string '$1' matches pattern '$2'"
}
$ foo bar '.*r'
string 'bar' matches pattern '*r'
$ foo bar '.*r|.*s'
string 'bar' matches pattern '*r|*s'
Но я также хочу 100% bash
решение. Моя попытка:
foo()
{
[[ "$1" = $2 ]] && echo "string '$1' matches pattern '$2'"
}
Базовый шаблон в порядке:
$ foo bar '*r'
string 'bar' matches pattern '*r'
Но какое форматирование следует использовать для обнаружения чередования? / расширенный шаблон?
$ foo bar '*(r|s)'
$ foo bar '*\(r|s\)'
$ foo bar '*\(r\|s\)'
$ foo bar '*\{r,s\}'
$ foo bar '*{r,s}'
Кроме того, bash
справочная страница говорит:
[[ выражение ]]
Разбиение на слова и раскрытие пути не выполняются для слов между [[ и ]]; Выполняется расширение с помощью тильды, расширение параметров и переменных, арифметическое расширение, подстановка команд, подстановка процессов и удаление кавычек.
- Есть ли способ использовать расширенное регулярное выражение/шаблон в операторе
[[ ]]
? - Как бы вы реализовали такую функцию?
*
, не является допустимым регулярным выражением. - person chepner   schedule 18.09.2013