La pagina man per GNU find afferma:
-exec command ; [...] The string `{}' is replaced by the current file name being processed everywhere it occurs in the arguments to the command, not just in arguments where it is alone, as in some versions of find. Both of these constructions might need to be escaped (with a `\') or quoted to protect them from expansion by the shell.
Questo è dall'uomo a find
(GNU findutils) 4.4.2.
Ora ho provato questo con bash e dash, ed entrambi non hanno bisogno di {}
essere mascherati. Ecco un semplice test:
find /etc -name "hosts" -exec md5sum {} \;
Esiste un guscio, per il quale ho davvero bisogno di mascherare le parentesi graffe? Nota che non dipende dal fatto che il file trovato contenga uno spazio vuoto (invocato da bash):
find ~ -maxdepth 1 -type d -name "U*" -exec ls -d {} \;
/home/stefan/Ubuntu One
Questo cambia se il file trovato viene passato a una subshell:
find ~ -maxdepth 3 -type d -name "U*" -exec bash -c 'ls -d {}' \;
ls: cannot access /home/stefan/Ubuntu: No such file or directory
ls: cannot access One: No such file or directory
che può essere risolto da:
find ~ -maxdepth 3 -type d -name "U*" -exec bash -c 'ls -d "$0"' {} \;
in contrasto con:
find ~ -maxdepth 3 -type d -name "U*" -exec bash -c 'ls -d "{}"' \;
/home/stefan/Ubuntu One
ma non è di questo che parla la pagina man, vero? Quindi quale shell tratta {}
in modo diverso?