मैं एक स्ट्रिंग वैरिएबल को प्रतिस्थापित करने की कोशिश कर रहा हूं, जिसमें एकाधिक उद्धृत शब्द हैं, जो कमांड के पैरामीटर के रूप में हैं।उद्धृत, बहु-शब्द तारों को तर्क के रूप में कैसे बदला जाए?
इस प्रकार, निम्न उदाहरण स्क्रिप्ट (नोट मामला है, जिसकी वजह उत्पादन stderr करने के लिए लॉग इन करने की में -x) को देखते हुए
#!/bin/bash -x
myArg="\"hello\" \"world\""
echo "string is:" $myArg
exit
कौन सा हमें देता है,
+ myArg='"hello" "world"'
+ echo 'string is:' '"hello"' '"world"'
string is: "hello" "world"
+ exit
रेखा दो दिखाता है कि वास्तव में आदेश को क्या पारित किया जाता है; बैश ने स्ट्रिंग में प्रत्येक शब्द को एकल उद्धरण जोड़ा है। यदि मैं इसके बजाय, "$ myArg" उद्धृत करता हूं, वही होता है लेकिन प्रत्येक शब्द के बजाय पूरी स्ट्रिंग के लिए होता है।
अब, कल्पना करें कि echo
के बजाय, हम एक प्रोग्राम को स्ट्रिंग पास कर रहे हैं जहां कुछ तर्कों को "*"
(जिसे खोल द्वारा विस्तारित नहीं किया जाना चाहिए) को उद्धृत करने की आवश्यकता है।
स्पष्टीकरण के लिए, मैं नहीं चाहता कि विस्तार के दौरान एकल उद्धरण जोड़े गए हों। मैं इसे कैसे प्राप्त कर सकता हूं?
आप क्या कर रहे हैं?जब तक आप 'eval' के साथ कुछ नहीं कर रहे हैं, चाहे कार्यक्रम में पारित स्ट्रिंग में '" * "' या '*' कोई फर्क नहीं पड़ता है। – Sorpigal
किसी भी व्यक्ति को भ्रमित करने के लिए: शेबैंग में '-x' नोट करें, जिससे आउटपुट लॉग हो जाता है। – user123444555621
@ Pumbaa80, वास्तव में, मैंने प्रश्न के स्पष्टीकरण को जोड़ा है। –