Usar comillas dobles o sin comodines

Usar comillas dobles o sin comodines

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.jpgno 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 findve):

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.jpgy foo-gallifrey-road-doctors-14437-1366x768.jpgcomo 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.

información relacionada