ฉันมีสคริปต์ Python ที่ยอมรับข้อโต้แย้งสตริง
$ python script.py "one image.jpg" "another image.jpg"
ทำงานได้ตามที่คาดไว้
Python argparse: ["one image.jpg", "another image.jpg"]
ถ้าฉันต้องการส่งชื่อไฟล์ฉันจะทำ
$ python script.py $(ls "/some/dir/*.jpg")
Python argparse: ["one", "image.jpg", "another", "image.jpg"]
หากใช้คำสั่ง-Q
ของls
ฉันสามารถตัดผลลัพธ์ระหว่างเครื่องหมายคำพูดคู่ อย่างไรก็ตามเครื่องหมายคำพูดจะคงอยู่ในสคริปต์ Python เช่น
$ python script.py $(ls -Q "/some/dir/*.jpg")
Python argparse: ['"one image.jpg"', '"another image.jpg"']
ฉันจะขยายls
ชื่อไฟล์เป็นสตริงที่เหมาะสมเพื่อใช้เป็นอาร์กิวเมนต์ได้อย่างไร (เช่นในตัวอย่างแรกของฉัน)
"$(ls -Q '/some/dir/*.jpg')"
คุณควรจะพูดขยายตัวเปลือก: อย่างไรก็ตามมีทางเลือกที่ดีกว่าตามที่ระบุไว้ในคำตอบ