Wil*_*den 3 bash regular-expression
我想查看 的输出git status -s以确定树中是否有任何未跟踪的文件。我尝试了以下测试,但正则表达式不匹配。为什么不?
$ git status -s
## master
M updated-file
?? new-file
$ [[ $(git status -s) =~ ^\?\? ]] || echo "no match"
no match
Run Code Online (Sandbox Code Playgroud)
我还希望能够以相同的方式测试添加/修改/删除的文件。我通常只是^\s*[AMD]为此目的使用类似的东西,但这也不起作用。是什么赋予了?
您正在匹配整个字符串,而不是字符串的每一行,因此您实际上是##在该正则表达式中进行测试。
grep 是更好的选择:
if ! git status -s | grep -q '^??'; then
echo "no match"
fi
Run Code Online (Sandbox Code Playgroud)
根据要求,您可以对添加/修改/删除执行相同操作:
git status -s | grep '^ *[AMD]'
Run Code Online (Sandbox Code Playgroud)
您可能还想查看git status --porcelain(首次出现在 1.7.0 中的选项),它更侧重于解析。