Trang man cho GNU tìm trạng thái:
-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.
Đó là từ người đàn ông đến find
(GNU findutils) 4.4.2.
Bây giờ tôi đã thử nghiệm điều này với bash và dash, và cả hai đều không cần phải {}
đeo mặt nạ. Đây là một bài kiểm tra đơn giản:
find /etc -name "hosts" -exec md5sum {} \;
Có một cái vỏ, mà tôi thực sự cần phải che mặt niềng răng? Lưu ý rằng nó không phụ thuộc vào việc tệp tìm thấy có chứa một khoảng trống (được gọi từ bash) hay không:
find ~ -maxdepth 1 -type d -name "U*" -exec ls -d {} \;
/home/stefan/Ubuntu One
Điều này thay đổi nếu tệp tìm thấy được chuyển đến một khung con:
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
có thể được giải quyết bằng cách:
find ~ -maxdepth 3 -type d -name "U*" -exec bash -c 'ls -d "$0"' {} \;
trái ngược với:
find ~ -maxdepth 3 -type d -name "U*" -exec bash -c 'ls -d "{}"' \;
/home/stefan/Ubuntu One
Nhưng đó không phải là những gì trang người đàn ông đang nói về, phải không? Vì vậy, vỏ nào xử lý {}
theo một cách khác nhau?