Bash正则表达式模式匹配空格,双括号内测试,使用“~=”运算符

Bash正则表达式模式匹配空格,双括号内测试,使用“~=”运算符

简而言之,我只是找不到一种方法来将变量与某些包含空格的模式进行匹配。

这是我期望的工作(回显“ok”字符串)

item='foobar baz'
pat=".+bar baz"
if [[ "$item" =~ "$pat" ]] ; then
    echo ok
fi

在 $pat 周围添加/删除引号似乎没有任何区别。我得到以下两个错误:

bash: conditional binary operator expected
bash: syntax error near `~='

有人可以帮我指出我在这里做错了什么吗?我应该立即放置模式(没有任何引号/双引号,也没有变量引用)吗?如果是这样的话,我该如何在其中添加空格? (使用正则表达式匹配,而不是替代方案)

谢谢 !

答案1

语法错误是不言自明的,即您使用了~=而不是=~.

关于正则表达式模式,只需使用$pat(以及$item),作为 shell 内置函数[[可以处理分词:

item='foobar baz'
pat=".+bar baz"
if [[ $item =~ $pat ]]; then
    echo ok
fi

$pat当您在ie周围使用双引号时"$pat",正则表达式标记.+会按字面意思处理。

例子:

$ item='foobar baz'; pat=".+bar baz"; if [[ $item =~ $pat ]]; then echo OK; fi
OK

相关内容