Expansão da shell não está acontecendo

1

Por que esses dois comandos são equivalentes (ou, por isso, parecem baseados nos resultados que recebo)? Eu imaginei que o primeiro comando não funcionaria porque o * seria tratado como o operador glob, mas em vez disso ele foi passado para grep e interpretado como um padrão regex.

git diff master | grep \+.*TODO
git diff master | grep \+.\*TODO
    
por 11th Hour Worker 16.08.2017 / 01:16

1 resposta

3

Um nome de arquivo glob só será expandido se houver um arquivo correspondente no diretório atual - caso contrário (exceto as opções nullglob ou failglob shell) ele será transmitido como está. Então:

$ echo \+.*TODO
\+.*TODO
$ printf '+foo\n+TODO\n+bar' | grep \+.*TODO
+TODO

mas

$ touch '\+.abcTODO'
$ echo \+.*TODO
\+.abcTODO
$ printf '+foo\n+TODO\n+bar' | grep \+.*TODO
$ printf '+foo\n+TODO\n+bar' | grep \+.\*TODO
+TODO
    
por 16.08.2017 / 02:49