Halaman manual untuk GNU find state:
-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.
Itu dari man to find
(GNU findutils) 4.4.2.
Sekarang saya menguji ini dengan bash dan dash, dan keduanya tidak perlu memiliki {}
topeng. Berikut ini adalah tes sederhana:
find /etc -name "hosts" -exec md5sum {} \;
Apakah ada shell, yang saya benar-benar perlu untuk menutupi kawat gigi? Perhatikan, itu tidak tergantung pada apakah file yang ditemukan berisi kosong (dipanggil dari bash):
find ~ -maxdepth 1 -type d -name "U*" -exec ls -d {} \;
/home/stefan/Ubuntu One
Ini berubah jika file yang ditemukan diteruskan ke subkulit:
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
yang dapat diselesaikan dengan:
find ~ -maxdepth 3 -type d -name "U*" -exec bash -c 'ls -d "$0"' {} \;
berlawanan dengan:
find ~ -maxdepth 3 -type d -name "U*" -exec bash -c 'ls -d "{}"' \;
/home/stefan/Ubuntu One
tapi bukan itu yang dibicarakan oleh halaman manual, bukan? Jadi cangkang mana yang memperlakukan {}
dengan cara yang berbeda?