ในขณะที่มันเป็นความจริงที่eval
จะต้องเข้าหาด้วยความระมัดระวังeval echo
อยู่เสมอการก่อสร้างนั้นไม่ไร้จุดหมายเสมอไปและสามารถใช้ได้อย่างปลอดภัย เมื่อเร็ว ๆ นี้ฉันต้องการให้มันได้รับการขยายการประเมินหลายครั้งตามที่ฉันต้องการ
bash
ทำวงเล็บปีกกาหลายตัวจากซ้ายไปขวาดังนั้น
xargs -I_ cat _/{11..15}/{8..5}.jpg
ขยายเป็น
xargs -I_ cat _/11/8.jpg _/11/7.jpg _/11/6.jpg _/11/5.jpg _/12/8.jpg _/12/7.jpg _/12/6.jpg _/12/5.jpg _/13/8.jpg _/13/7.jpg _/13/6.jpg _/13/5.jpg _/14/8.jpg _/14/7.jpg _/14/6.jpg _/14/5.jpg _/15/8.jpg _/15/7.jpg _/15/6.jpg _/15/5.jpg
แต่ฉันต้องการการขยายรั้งที่สองเสร็จก่อนยอมทำ
xargs -I_ cat _/11/8.jpg _/12/8.jpg _/13/8.jpg _/14/8.jpg _/15/8.jpg _/11/7.jpg _/12/7.jpg _/13/7.jpg _/14/7.jpg _/15/7.jpg _/11/6.jpg _/12/6.jpg _/13/6.jpg _/14/6.jpg _/15/6.jpg _/11/5.jpg _/12/5.jpg _/13/5.jpg _/14/5.jpg _/15/5.jpg
สิ่งที่ดีที่สุดที่ฉันสามารถทำได้คือ
xargs -I_ cat $(eval echo _/'{11..15}'/{8..5}.jpg)
งานนี้เพราะราคาเดียวปกป้องชุดแรกของการจัดฟันจากการขยายตัวระหว่างการแยกวิเคราะห์ของeval
บรรทัดคำสั่งออกจากพวกเขาจะได้รับการขยายตัว subshell eval
อุทธรณ์โดย
อาจมีรูปแบบที่น่าสนใจเกี่ยวกับการขยายรั้งแบบซ้อนที่อนุญาตให้สิ่งนี้เกิดขึ้นในขั้นตอนเดียว แต่ถ้ามีฉันแก่เกินไปและโง่เกินกว่าที่จะมองเห็น นอกจากนี้ยังมีกระสุนที่นอกเหนือจากbash
ที่อนุญาตให้ใช้วิธีที่เป็นระเบียบเพื่อบรรลุสิ่งนี้ แต่ในกรณีใด ๆ การใช้งานนี้eval
มีความปลอดภัยเนื่องจากอาร์กิวเมนต์เป็นสตริงคงที่ทั้งหมดที่ไม่มีการขยายพารามิเตอร์