이 정규식이 작동하지 않는 이유는 무엇입니까?

이 정규식이 작동하지 않는 이유는 무엇입니까?

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에 처음 등장)을 살펴볼 수도 있습니다 .

관련 정보