在bash shell中
testvar=
echo $testvar
[[ $testvar =~ ^M* ]] && echo "foo"
foo
不是正则表达式模式匹配以' M'开头的字符串,后面是什么?
答案 0 :(得分:1)
NO *表示0或更多,所以空字符串将匹配,添加强制M或使用+代替*,它将执行您想要的操作。
您的测试应如下所示:。
[[ $testvar =~ ^MM* ]] && echo "foo"
或
[[ $testvar =~ ^M+ ]] && echo "foo"
答案 1 :(得分:0)
要匹配以M
开头的字符串,您有两个选择:
[[ $testvar = M* ]] # use glob pattern matching
或
[[ $testvar =~ ^M ]] # use a regular expression
您尝试的关键问题是您已将*
直接放在M
之后,该字符串在字符串开头匹配零个或多个Ms(即任何内容)。我使用的模式在开始时匹配任何带有M的字符串。