आप अंदर एक कमांड के साथ एक वाक्य कैसे जारी रखते हैं


12

उदाहरण के लिए, मैं अपनी स्क्रिप्ट फ़ाइल में "इस समय ऑनलाइन 10 लोग हैं" कहने की कोशिश कर रहा हूं।

मुझे लगता है कि "लोगों को ऑनलाइन इस समय" बिना अगली पंक्ति में काम करने की कमान मिल सकती है।

फिलहाल, मेरे पास है

w='who | wc -l' 
echo "There are $w people online at the moment" 

हालांकि, मैं हमेशा आउटपुट के साथ समाप्त होता हूं

There are who | wc -l users online at the moment 

आपको बीच में काम करने की आज्ञा कैसे मिलती है? मैं उदाहरणों को देखने और कॉपी करने की कोशिश कर रहा हूं, लेकिन यह मेरे कमांड प्रतिस्थापन मुद्दे की मदद करने के लिए नहीं लगता है।

जवाबों:


20

आप का आउटपुट चाहते हैं

who | wc -l

सौंपा wनहीं, उस तार को नहीं, जो आपको उसके चारों ओर के उद्धरणों के कारण मिलता है। आपको कमांड प्रतिस्थापन का उपयोग करना चाहिए $(...):

w=$(who | wc -l)
echo "There are $w people online at the moment"

(आप backquotes का उपयोग भी कर सकते हैं, लेकिन आप आसानी से उन पर घोंसला नहीं बना सकते हैं)।


बैश सहित कुछ गोले में, आप बैकक्वेस्ट घोंसला कर सकते हैं। इसके लिए नेस्टेड
एस्केप की

1
@ पोलिर्जिक धन्यवाद। मैंने अपने उत्तर को अपडेट किया, लेकिन मुझे लगता है कि मैं $()खुद को घोंसले के साथ
चिपकाऊंगा


5

कमांड निष्पादित करने के लिए आपको बैकटिक का उपयोग करना चाहिए

w=`who | wc -l` echo "There are $w people online at the moment"


14
देखें, $(...)
बैकटिक्स

7
वैध बिंदु। "एक एकल उद्धरण के साथ बैकटिक भी आसानी से भ्रमित है।" वास्तव में यहाँ क्या हुआ।
घनिमा

@ महिमा: वास्तव में! यह प्रश्न एक बेहतरीन उदाहरण है, जब हमें यह प्रदर्शित करने की आवश्यकता है कि बैकटिक्स से क्यों बचा जाना चाहिए। :)
PM 2Ring

अच्छा, मैं केवल इस उत्तर upvoted दिया है क्योंकि उसमें केवल एक ही है जो वास्तव में विस्तार से बताया है जहां ओपी गलती थी। चाहे backticks अच्छे हैं या बुराई सिर्फ साइड नोट्स हैं।
रुस्लान
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.