คำตอบ:
เพียงแค่เขียน{}
สองครั้งในคำสั่งของคุณ ต่อไปนี้จะทำงาน:
$ echo test | xargs -I {} echo {} {}
test test
ปัญหาของคุณคือวิธีการคำสั่งที่มีการซ้อนกัน ให้ดูที่นี้
echo test | xargs -I {} echo {} && echo {}
ทุบตีecho test | xargs -I {} echo {}
จะดำเนินการ หากทำงานได้สำเร็จecho {}
จะดำเนินการ ในการเปลี่ยนรังคุณสามารถทำสิ่งนี้:
echo test | xargs -I {} sh -c "echo {} && echo {}"
อย่างไรก็ตามคุณอาจได้รับปัญหาเพราะวิธีการอาจมีแนวโน้มที่จะฉีดรหัส เมื่อ "test" ถูกแทนที่ด้วยรหัสเชลล์มันจะถูกดำเนินการ ดังนั้นคุณควรส่งผ่านอินพุตไปยังเชลล์ที่อยู่ติดกันพร้อมอาร์กิวเมนต์
echo test | xargs -I {} sh -c 'echo "$1" && echo "$1"' sh {}
$(rm -f *)
แท้จริง จะดีกว่าที่จะทำxargs -I {} sh -c 'echo "$1" && echo "$1"' sh {}
ตัวเลือกอื่นคือใช้-i
แฟล็กซึ่งเหมือนกับ-I{}
(หมายถึงการแทนที่ด้วย{}
):
$ echo test | xargs -i echo {} {}
This option is deprecated; use -I instead.
man xargs
สำหรับฉันเท่านั้นตัวพิมพ์เล็กทำงานได้ ฉันมีภาพหลายร้อยภาพในไดเรกทอรีและต้องการให้พวกมันมาเป็นรายการ -I
ตัวเลือกตัวพิมพ์ใหญ่ฉันไม่ทำงานสำหรับฉัน เฉพาะตัวพิมพ์เล็ก อาจเป็นเพราะความแตกต่างของรุ่น ภาพเหล่านี้ล้วนมีชื่อเหมือนDaniel_(somenumber).jpg
กัน
ไวยากรณ์นี้ใช้งานได้:
ls -l | tr -s ' ' ':'| cut -d: -f9 | xargs -i echo "img src='"{}"'alt='{}'"
ผลตอบแทน:
src='Daniel_248.jpg' alt='Daniel_248.jpg'
...
Linux เวอร์ชั่น 4.14.96-hw + # 80 SMP x86_64 GNU / Linux
var=test & echo $var ...