คำนำ: ผมเข้าใจความแตกต่างระหว่าง&-exec {} \;
-exec {} +
ฉันยังไม่ได้มีปัญหาเช่นนี้find
ผมเพียงแค่อยากรู้เกี่ยวกับความหมายของ
เมื่อสิ้นสุด-exec
ทะเลาะกับ+
แทน;
เราต้องการที่จะจบนี้กับ{} +
ตัวอย่างเช่น:
# FreeBSD find
$ find . -type f -exec cp {} /tmp +
find: -exec: no terminating ";" or "+"
# GNU find is even more cryptic:
$ find: missing argument to `-exec'
ใช้;
ในตัวอย่างเหล่านี้แทนที่จะ+
ทำงานได้ดี (แต่เห็นได้ชัดว่าทำอย่างอื่น)
จากPOSIX :
-exec utility_name [argument ...] ;
-exec utility_name [argument ...] {} +
... เฉพาะ <plus-sign> ที่ตามหลังอาร์กิวเมนต์ที่มีเพียงอักขระสองตัวเท่านั้น "
{}
" เท่านั้นที่จะคั่นจุดสิ้นสุดของนิพจน์หลัก การใช้งาน <plus-sign> อื่น ๆ จะไม่ถือว่าเป็นพิเศษ
ในคำอื่น ๆ เมื่อใช้+
คำสั่งต้องการ{} +
จะจบลงด้วย
ทำไมนี้ และทำไมถึงมี แต่+
ไม่ใช่;
? ตอนแรกฉันคิดว่าอาจหลีกเลี่ยงข้อขัดแย้งกับชื่อไฟล์ที่มี+
แต่ชื่อไฟล์ที่;
ดูเหมือนจะใช้ได้ดีใช่ไหม ฉันคิดว่ามันยากที่จะเชื่อว่าข้อ จำกัด นี้เป็นเรื่องที่สุ่ม
The "-exec ... {} +" syntax adopted was a result of
IEEE PASC Interpretation 1003.2 #210
และในเอกสารนั้นคุณจะพบรายละเอียดเพิ่มเติมเช่น:Note that the "+" is only treated as special if it immediately follows "{}". This minimises the chances of causing problems with existing uses of "+" as an argument with "-exec".