Strona man dla GNU find stwierdza:
-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.
To od człowieka do find
(GNU findutils) 4.4.2.
Teraz przetestowałem to za pomocą bash i dash i oba nie muszą {}
być maskowane. Oto prosty test:
find /etc -name "hosts" -exec md5sum {} \;
Czy istnieje skorupa, dla której naprawdę muszę zamaskować aparat ortodontyczny? Zauważ, że nie zależy to od tego, czy znaleziony plik zawiera puste (wywołane z bash):
find ~ -maxdepth 1 -type d -name "U*" -exec ls -d {} \;
/home/stefan/Ubuntu One
Zmienia się, jeśli znaleziony plik zostanie przekazany do podpowłoki:
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
które można rozwiązać przez:
find ~ -maxdepth 3 -type d -name "U*" -exec bash -c 'ls -d "$0"' {} \;
W odróżnieniu:
find ~ -maxdepth 3 -type d -name "U*" -exec bash -c 'ls -d "{}"' \;
/home/stefan/Ubuntu One
ale nie o tym mówi strona podręcznika, prawda? Która skorupa traktuje {}
w inny sposób?