आपके पास:
/usr/bin/bash -c sub=1; echo $sub
आप मूल्य के परिवहन के लिए एक subshell में एक चर, उपयोग stdout सेट करना चाहते हैं पहले subshell पैदा की है अंतिम गूंज आदेश या वैरिएबल $HOST_IPS
में $
संकेत से बचने के लिए कमांड स्ट्रिंग में प्रतिस्थापित किया जाएगा:
/usr/bin/bash -c "HOST_IPS=$(/usr/bin/ifconfig | /usr/bin/awk 'BEGIN {cnt=0} {if($0 ~ /inet/&& cnt==1) {print $2} cnt++}'); echo \$HOST_IPS"
और तत्काल दृश्यता के लिए: @ gniourf_gniourf की टिप्पणी करने के लिए
# v-- insert backslash here
/usr/bin/bash -c "HOST_IPS=$(same as before); echo \$HOST_IPS"
विपरीत, यह नहीं वास्तव में आवश्यक अन्य डॉलर चिह्न से बचने के लिए है। हालांकि, लिखित के रूप में, कमांड प्रतिस्थापन सबहेल (!) द्वारा नहीं किया जाता है; इसका परिणाम कमांड स्ट्रिंग में प्रतिस्थापित किया जाता है जो सबहेल को पास किया जाता है। कॉल
mypid() { echo $$; }
bash -c "pid=$(mypid); echo \$pid; mypid"
तरह से यह काम करता है का प्रदर्शन: यह एक बार माता पिता खोल के पीआईडी प्रिंट होगा और एक बार शिकायत करते हैं कि mypid
एक ज्ञात आदेश क्योंकि subshell समारोह पता नहीं है नहीं है।
पैरेंट खोल में ifconfig | awk
कमांड चलाने के बाद समस्या होने की संभावना नहीं है, तो आप शायद कमांड प्रतिस्थापन भाग अपरिवर्तित छोड़ सकते हैं। यदि यह महत्वपूर्ण है कि कमांड द्वारा कमांड चलाया जाए, तो आपको वहां भी सभी चीजों से बचना होगा।
1. आप कहां '/ bin/echo' देखते हैं? 2. चूंकि आपके बाहरी उद्धरण डबल कोट्स हैं, इसलिए आपको _all_ '' 'के अंदर संकेतों से बचने की आवश्यकता है। –