El shell puede transformar la línea de comando antes de la ejecución del comando. Tanto el shell como el grepuso de comillas pueden eliminar el significado especial de algunos caracteres. No obstante, grepy 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 grepy 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. grepreconoce una expresión de corchete con formato incorrecto.
echo '[]' | grep '\[]'
Finalmente, en este caso, el shell elimina las comillas y \[]se transmite como argumento greppero, en este caso específico, ¹, \[se interpreta grepcomo 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 .
bashincluida),!todavía se expande entre comillas dobles, solo las comillas simples detendrán su expansión (o desactivarán la opción de shell).