![grep menos el número no funciona](https://rvso.com/image/1568345/grep%20menos%20el%20n%C3%BAmero%20no%20funciona.png)
Quiero encontrar todos los archivos en un directorio que contenga -2
.
Usando ls | grep "-2"
devolucionesusage: grep...
El uso de comillas simples en lugar de comillas dobles arroja lo mismo, y tampoco usa comillas en absoluto, mientras que la búsqueda de cualquier otra cosa arroja correctamente nombres de archivos coincidentes.
Según recuerdo, -
no es un carácter especial de expresión regular.
No se centre en el problema específico de encontrar archivos con un nombre. Principalmente quiero entender por qué grep se comporta de esta manera.
Usando bash en macOS 10.13
Respuesta1
Es como si estuviera interpretando -2 como un parámetro de línea de comando, independientemente de que esté entre comillas.
grep
no sabesi un parámetro está entre comillas o no.
El propio shell 1 realiza muchos pasos de análisis antes de ejecutar cualquier cosa: >
se aplican redirecciones, $
se expanden las variables, *
se expanden los comodines, |
las canalizaciones se dividen en un conjunto de comandos individuales y cada comando se divide en una serie de palabras.
Entonces, ya sea que ejecute grep -2
, grep '-2'
, grep \-2
o incluso x=-2; grep $x
, el shell todavía lo ve como la misma lista de parámetros: { grep
, -2
}. Esto es lo que se pasará a la llamada al sistema execv() y es lo quegrepEl programa recibirá en su argv[]
matriz, independientemente de la cita original.
1 Incluso en Windows, donde la línea de comando en CreateProcess() es solo una cadena, la mayoría de los puertos degrepseguirá teniendo este comportamiento porque la biblioteca de tiempo de ejecución de C realiza la misma división de argumentos durante la inicialización.