解决方案基于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
,联机帮助页说:
[[表达式]]
对[[和]]之间的词不进行分词和路径名扩展;执行波浪号扩展、参数和变量扩展、算术扩展、命令替换、进程替换和引号删除。
[[ ]]
在语句中使用扩展的正则表达式/模式有技巧吗?- 你将如何实现这样的功能?