It is like if it is interpreting -2 as a command line parameter, regardless the fact it is wrapped by quotes.
grep
não sabe se um parâmetro é agrupado por aspas ou não.
Muitas etapas de análise são executadas pelo próprio shell 1 antes de executar qualquer coisa - >
redirecionamentos são aplicados, $
variáveis são expandidas, *
caracteres curinga são expandidos, |
pipelines divididos em um conjunto de comandos individuais e cada comando dividido em uma matriz de palavras.
Então, se você executar grep -2
, grep '-2'
, grep \-2
ou mesmo x=-2; grep $x
, o shell ainda a verá como a mesma lista de parâmetros: { grep
, -2
}. Isso é o que será passado para a chamada do sistema execv (), e é o que o programa grep receberá em sua matriz argv[]
, independentemente da citação original.
1 Mesmo no Windows, onde a linha de comando em CreateProcess () é apenas uma única string, a maioria das portas do grep ainda terá esse comportamento porque a biblioteca de tempo de execução C executa a mesma divisão de argumentos durante a inicialização.