बैश: वैकल्पिक रूप से एक कमांड के लिए तर्क


21

मैं एक कमांड कॉल में तर्क जोड़ने की कोशिश कर रहा हूं जो दूसरे चर पर निर्भर है। कृपया शेल स्क्रिप्टिंग कोड देखें:

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

उदाहरण में, यदि titleशून्य नहीं दिया गया है , तो एक तर्क जोड़ा जाएगा curl।

यह सही ढंग से काम नहीं करता है यदि titleरिक्त स्थान होते हैं। इसके अलावा, मैं $(...)उद्धरणों के साथ नहीं घेर सकता , क्योंकि अगर titleअशक्त है, तो यह एक अप्रत्याशित खाली तर्क देगा curl।

उम्मीद के मुताबिक काम करने के लिए मुझे क्या करना चाहिए।

जवाबों:


23

मैंने बैश ${var:+...}सिंटैक्स, ( संदर्भ ) के साथ समस्या को हल किया है ।

स्क्रिप्ट अब बदल जाती है

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

जो पूरी तरह से काम करता है।

और देखें:

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.