Bash: ส่งอาร์กิวเมนต์ที่เป็นทางเลือกไปยังคำสั่ง


21

ฉันกำลังพยายามเพิ่มข้อโต้แย้งในการเรียกใช้คำสั่งขึ้นอยู่กับตัวแปรอื่น โปรดดูรหัสเชลล์สคริปต์:

curl \
  $([ -z "${title}" ] || echo --data-urlencode title=${title}) \
  http://example.com

ในตัวอย่างถ้าtitleจะได้รับไม่เป็นโมฆะ, curlอาร์กิวเมนต์จะถูกเพิ่มเข้าไป

สิ่งนี้ทำงานไม่ถูกต้องหากtitleมีช่องว่าง นอกจากนี้ผมไม่สามารถล้อมรอบ$(...)ด้วยใบเสนอราคาเพราะถ้าเป็นโมฆะก็จะให้ผลผลิตอาร์กิวเมนต์ที่ว่างเปล่าที่ไม่คาดคิดtitlecurl

ฉันควรทำอย่างไรเพื่อให้ทำงานได้ตามที่คาดหวัง

คำตอบ:


23

ฉันแก้ไขปัญหาด้วย bash ${var:+...}syntax แล้ว ( อ้างอิง )

สคริปต์จะเปลี่ยนเป็น

curl \
    ${title:+ --data-urlencode "title=${title}"} \
    http://example.com

ซึ่งทำงานได้อย่างสมบูรณ์แบบ

ดูเพิ่มเติมที่:

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.