Usar comillas dobles o sin comillas con comodines

Encontré este artículo que intenta explicar el command find. Da un ejemplo de

find /tmp -iname "data*.txt" 

ahora este artículo aquí dice que

Las comillas dobles no suprimen la sustitución de palabras que comienzan por "$", pero suprimen la expansión de caracteres comodín.

También cuando probé los dos commands

 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é la doble cita no suprime la expansión del comodín en A ? Tenía la printing de que A no funcionaría y que solo B funcionaría.

Solutions Collecting From Web of "Usar comillas dobles o sin comillas con comodines"

En el caso B:

 find . -iname *gall* 

El shell expandirá *gall* en una list de todos los files que coincidan con ese patrón. Como solo tiene un file en su directory actual que coincide con ese patrón, esto se convierte en:

 find . -iname gallifrey-road-doctors-14437-1366x768.jpg 

… por lo que find searchá files que coincidan con ese nombre exacto. foo-gallifrey-road-doctors-14437-1366x768.jpg no se encontró. Si tenía dos o más files que coinciden con el glob, terminaría con un command de búsqueda mal formado; Estoy bastante seguro de que simplemente saldría con un error.

En el caso A:

 find . -iname "*gall*" 

Debido a las comillas, el shell no expandirá el patrón. Esto acaba de convertirse (esto es lo que ve el buscador):

 find . -iname *gall* 

Después de eso, el command find usa ese patrón para search todos los files (y directorys, etc.) que coincidan con ese patrón. Esto encontrará a gallifrey-road-doctors-14437-1366x768.jpg y foo-gallifrey-road-doctors-14437-1366x768.jpg y cada file que coincida con el patrón *gall* .

Entonces: su command pasa por el intérprete de commands (que no expande globs entre comillas y quita la capa más externa de comillas), y luego lo find para find , que internamente utiliza el patrón para hacer coincidir los nombres de file.