
Me encontré conesteartículo que intenta explicar el comando de búsqueda. Da un ejemplo de
find /tmp -iname "data*.txt"
ahora este articuloaquíEstablece que
Las comillas dobles no suprimen la sustitución de palabras que empiezan por "$"pero sí suprimen la expansión de caracteres comodín.
También cuando probé los dos comandos
admin@localhost Downloads$ ls
gallifrey-road-doctors-14437-1366x768.jpg mydir
admin@localhost Downloads$ find . -iname "*gall*"
./gallifrey-road-doctors-14437-1366x768.jpg
admin@localhost Downloads$ find . -iname "*gall*" -----> A
./gallifrey-road-doctors-14437-1366x768.jpg
admin@localhost Downloads$ find . -iname *gall* -----> B
./gallifrey-road-doctors-14437-1366x768.jpg
admin@localhost Downloads$
El resultado parece ser el mismo. ¿En qué caso serían diferentes? ¿Por qué las comillas dobles no suprimen la expansión del comodín en A
? Tenía la impresión de que A no funcionaría y que sólo B funcionaría.
Respuesta1
En el caso B:
find . -iname *gall*
Elcaparazónse expandirá *gall*
a una lista de todos los archivos que coincidan con ese patrón. Dado que sólo tiene un archivo en su directorio actual que coincide con ese patrón, esto se convierte en:
find . -iname gallifrey-road-doctors-14437-1366x768.jpg
... entonces find buscará archivos que coincidan exactamente con ese nombre. foo-gallifrey-road-doctors-14437-1366x768.jpg
no se encontraría. Si tuviera dos o más archivos que coincidieran con el glob, terminaría con un comando de búsqueda con formato incorrecto; Estoy bastante seguro de que simplemente saldría con un error.
En el caso A:
find . -iname "*gall*"
Debido a las comillas, el caparazónnoampliar el patrón. Esto simplemente se convierte (esto es lo que find
ve):
find . -iname *gall*
Después de eso, el comando de búsqueda usa ese patrón para buscar todos los archivos (y directorios, etc.) que coincidan con ese patrón. Esto encontrará tanto gallifrey-road-doctors-14437-1366x768.jpg
y foo-gallifrey-road-doctors-14437-1366x768.jpg
como todos los archivos que coincidan con el patrón *gall*
.
Entonces: su comando pasa por el shell (que no expande los globos entre comillas y elimina la capa más externa de comillas), yentoncespasa a find
, que utiliza internamente el patrón para hacer coincidir los nombres de archivos.