
eu me depareiesseartigo que tenta explicar o comando find. Ele dá um exemplo de
find /tmp -iname "data*.txt"
agora este artigoaquiafirma que
Aspas duplas não suprimem a substituição de palavras que começam com "$"mas suprimem a expansão de caracteres curinga.
Além disso, quando tentei os dois 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$
A saída parece ser a mesma. Em que caso seriam diferentes? Por que as aspas duplas não suprimem a expansão do curinga em A
? Tive a impressão de que A não funcionaria e apenas B funcionaria.
Responder1
No caso B:
find . -iname *gall*
Oconchairá se expandir *gall*
em uma lista de todos os arquivos que correspondem a esse padrão. Como você tem apenas um arquivo em seu diretório atual que corresponde a esse padrão, isso se torna:
find . -iname gallifrey-road-doctors-14437-1366x768.jpg
... então find irá procurar por arquivos que correspondam a esse nome exato. foo-gallifrey-road-doctors-14437-1366x768.jpg
não seria encontrado. Se você tivesse dois ou mais arquivos que correspondam ao glob, você acabaria com um comando find malformado; Tenho certeza de que simplesmente sairia com um erro.
No caso A:
find . -iname "*gall*"
Por causa das aspas, o shellnão vaiexpanda o padrão. Isso simplesmente se torna (isto é o que find
vê):
find . -iname *gall*
Depois disso, o comando find usa esse padrão para procurar todos os arquivos (e diretórios, etc.) que correspondam a esse padrão. Isso encontrará gallifrey-road-doctors-14437-1366x768.jpg
todos foo-gallifrey-road-doctors-14437-1366x768.jpg
os arquivos que correspondam ao padrão *gall*
.
Então: seu comando passa pelo shell (que não expande globs entre aspas e remove a camada mais externa de aspas) eentãopassa por find
, que usa internamente o padrão para corresponder aos nomes dos arquivos.