O shell pode transformar a linha de comando antes da execução do comando. O shell e greppode usar aspas para remover o significado especial de alguns caracteres. No entanto, grepe 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 grepe é 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. grepreconhece 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 grepcomo 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 .
bashincluída),!ainda é expandido entre aspas duplas, apenas aspas simples interromperão sua expansão (ou desativará a opção de shell).