El shell puede transformar la línea de comando antes de la ejecución del comando. Tanto el shell como el grep
uso de comillas pueden eliminar el significado especial de algunos caracteres. No obstante, grep
y las conchas tienen diferentes caracteres especiales. Además, el shell elimina los caracteres especiales sin escape que no resultaron de una expansión existente, antes de la ejecución del comando.
echo '[]' | grep '[]'
La cáscara transmite el argumento []
a grep
y se analiza como una expresión soporte con formato incorrecto por grep
.
echo '[]' | grep \[]
Arriba, podemos ver un caso similar. La barra invertida se elimina y []
se transmite como argumento a grep
. grep
reconoce una expresión de corchete con formato incorrecto.
echo '[]' | grep '\[]'
Finalmente, en este caso, el shell elimina las comillas y \[]
se transmite como argumento grep
pero, en este caso específico, ¹, \[
se interpreta grep
como un paréntesis literal. Se necesitan comillas para evitar que el intérprete interprete la barra invertida como un carácter especial.
¹ Especificación POSIX .
bash
incluida),!
todavía se expande entre comillas dobles, solo las comillas simples detendrán su expansión (o desactivarán la opción de shell).