我想查看 的输出以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 中),它更面向解析。