आप एक उपसमिति के लिए शेल तर्क कैसे बचते हैं?


0

कहते हैं कि आप एक शेल स्क्रिप्ट लिख रहे हैं। यह कमांड लाइन तर्कों की एक मनमानी संख्या लेता है और उन्हें कमांड लाइन उपयोगिता में पास करता है। उस उपयोगिता को कॉल करते समय, प्रत्येक तर्क को एक ध्वज के साथ उपसर्ग करने की आवश्यकता होती है। आपकी लिपि में इससे बचने का सही तरीका क्या है, ताकि उपयोगिता ठीक उसी तार को देख सके जो शेल स्क्रिप्ट करती है?

ठोस उदाहरण: नियमित अभिव्यक्ति पास करना grep। आप अपना रैपर स्क्रिप्ट चलाएं:

./findit.sh needle "old socks" "spare change"

और आप grepउन तर्कों के साथ मैच भाव के रूप में बुलाए जाने की उम्मीद करते हैं:

grep haystack.txt -e needle -e "old socks" -e "spare change"

यह -eउपसर्ग है जो चीजों को जटिल करता है; यदि यह आवश्यक नहीं था, तो आप उपयोग कर सकते हैं "$@"। आपकी स्क्रिप्ट को यह सुनिश्चित करने के लिए क्या करने की आवश्यकता है कि grepउसके तर्क ठीक से बच गए? क्या ऐसा करने का कोई पोर्टेबल तरीका है?

जवाबों:


0

मेरे पास बैश में एक कार्यशील संस्करण है, लेकिन यह बैश सरणियों का उपयोग करता है, और मुझे दृढ़ता से संदेह है कि यह पोर्टेबल नहीं है:

for arg in "$@"; do
  args+=("-e" "$arg")
done

grep haystack.txt "${args[@]}"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.