หน้าคนสำหรับ GNU ค้นหารัฐ:
-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.
นั่นคือจากคนสู่find
(GNU findutils) 4.4.2
ตอนนี้ฉันทดสอบสิ่งนี้ด้วย bash และ dash และทั้งคู่ไม่จำเป็นต้อง{}
ถูกหลอกลวง นี่คือการทดสอบอย่างง่าย:
find /etc -name "hosts" -exec md5sum {} \;
มีเปลือกหอยหรือไม่ซึ่งฉันจำเป็นต้องปิดบังเหล็กดัด? โปรดทราบว่ามันไม่ได้ขึ้นอยู่กับว่าไฟล์ที่พบมีช่องว่าง (เรียกใช้จาก bash):
find ~ -maxdepth 1 -type d -name "U*" -exec ls -d {} \;
/home/stefan/Ubuntu One
การเปลี่ยนแปลงนี้หากไฟล์ที่พบถูกส่งผ่านไปยัง 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
ซึ่งสามารถแก้ไขได้โดย:
find ~ -maxdepth 3 -type d -name "U*" -exec bash -c 'ls -d "$0"' {} \;
ตรงกันข้ามกับ:
find ~ -maxdepth 3 -type d -name "U*" -exec bash -c 'ls -d "{}"' \;
/home/stefan/Ubuntu One
แต่นั่นไม่ใช่สิ่งที่หน้าคนพูดถึงใช่มั้ย ดังนั้นเปลือกหอยชนิดใดที่ปฏิบัติ{}
แตกต่างกันไป?