Por que esse regex não funciona?

3

Eu quero ver a saída de git status -s para determinar se há arquivos não rastreados na árvore. Eu tentei o seguinte teste, mas o regex não combina. Porque não?

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

Eu também gostaria de poder testar arquivos adicionados / modificados / excluídos da mesma maneira. Eu normalmente usaria algo como ^\s*[AMD] para essa finalidade, mas isso também não funciona. O que dá?

    
por Will Vousden 07.11.2013 / 11:12

1 resposta

5

Você está combinando com a string inteira, não com cada linha da string, portanto você está realmente testando com ## nessa regex.

grep é a melhor opção para isso:

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

Conforme solicitado, você pode fazer o mesmo para adicionar / modificar / excluir:

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

Você também pode querer olhar para git status --porcelain (uma opção que apareceu pela primeira vez em 1.7.0), que é mais orientada para a análise.

    
por 07.11.2013 / 11:29