ฉันต้องการลบส่วนขยาย. sh ทั้งหมดเพื่อทำสิ่งนี้:
ls *.sh | xargs -I {} mv {} `basename {} .sh`
อย่างไรก็ตามมันไม่ทำงานมันจะทำงานเหมือนbasename
ส่งคืนชื่อไฟล์ที่ไม่เปลี่ยนแปลง
ทำไมมันเป็นเช่นนั้น
ตัวอย่างเช่นงานนี้:
ls *.sh | xargs -I {} echo `basename {}.jpg .jpg`;
แก้ไข :
วิธีแก้ไข: อัญประกาศเดี่ยวป้องกัน`basename ...`
การประเมินผลโดยเชลล์ก่อนที่คำสั่งจะรัน
ls *.sh | xargs -I {} sh -c 'mv {} `basename {} .sh`'
-i
ตัวเลือก แต่ตัวเลือก 'แบบคลาสสิก' ได้ถูกคัดค้าน ยกตัวอย่างเช่นการใช้เพียงหนึ่งตัวเลือก / บรรทัดใหม่หน้าคน POSIX-L1
แนะนำ หากต้องการเรียกพฤติกรรมเก่าของ-i
หน้าแนะนำ-I'{}'
ตัวเลือก