正则表达式匹配null bash字符串

时间:2016-03-02 14:57:39

标签: regex bash

在bash shell中

testvar=

echo $testvar

[[ $testvar =~ ^M* ]] && echo "foo"
foo

不是正则表达式模式匹配以' M'开头的字符串,后面是什么?

2 个答案:

答案 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的字符串。