为什么这个正则表达式不起作用?

为什么这个正则表达式不起作用?

我想查看 的输出以git status -s确定树中是否有任何未跟踪的文件。我尝试了以下测试,但正则表达式不匹配。为什么不?

$ git status -s
## master
 M updated-file
?? new-file
$ [[ $(git status -s) =~ ^\?\? ]] || echo "no match"
no match

我还希望能够以相同的方式测试添加/修改/删除的文件。我通常只是使用类似的东西^\s*[AMD]来达到这个目的,但这也不起作用。是什么赋予了?

答案1

您正在匹配整个字符串,而不是字符串的每一行,因此您实际上是##在该正则表达式中进行测试。

grep是一个更好的选择:

if ! git status -s | grep -q '^??'; then
    echo "no match"
fi

根据要求,您可以对添加/修改/删除执行相同的操作:

git status -s | grep '^ *[AMD]'

您可能还想研究一下git status --porcelain(该选项首次出现在 1.7.0 中),它更面向解析。

相关内容