O shell pode transformar a linha de comando antes da execução do comando. O shell e grep
pode usar aspas para remover o significado especial de alguns caracteres. No entanto, grep
e conchas têm diferentes caracteres especiais. Além disso, caracteres especiais sem escape que não resultaram de uma expansão existente são removidos, antes da execução do comando, pelo shell.
echo '[]' | grep '[]'
O shell transmite o argumento []
para grep
e é analisado como uma expressão de colchete malformada por grep
.
echo '[]' | grep \[]
Acima, podemos ver um caso semelhante. A barra invertida é removida e []
é transmitida como argumento para grep
. grep
reconhece uma expressão de colchete malformada.
echo '[]' | grep '\[]'
Finalmente, nesse caso, as aspas são removidas pelo shell e \[]
são transmitidas como argumento para grep
, mas, nesse caso específico ¹, \[
são interpretadas grep
como um colchete literal. São necessárias aspas para impedir a interpretação da barra invertida como um caractere especial pelo shell.
¹ especificação POSIX .
bash
incluída),!
ainda é expandido entre aspas duplas, apenas aspas simples interromperão sua expansão (ou desativará a opção de shell).