简而言之,我只是找不到一种方法来将变量与某些包含空格的模式进行匹配。
这是我期望的工作(回显“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