2013-04-18 6 views
18

इस परिणाम को एक शैल चर को कैसे असाइन करें?एक शेलस्क्रिप्ट चर के लिए आउटपुट कैसे असाइन करें?

इनपुट:

echo '1+1' | bc -l

आउटपुट:

2

प्रयास:

(काम नहीं किया)

#!bin/sh 
a=echo '1+1' | bc -l 
echo $a 
+0

संभावित डुप्लिकेट [कमांड से आउटपुट के बराबर एक बाश चर सेट कैसे करें?] (Http://stackoverflow.com/questions/4651437/how-to-set-a-bash-variable-equal-to -the-output-from-a-command) – Jahid

उत्तर

32

आप कमांड-प्रतिस्थापन नामक खोल सुविधा की तलाश में हैं।

cmd प्रतिस्थापन

  1. मूल के 2 रूपों, वापस पत्थर उम्र के लिए है, लेकिन पूरी तरह से पोर्टेबल और सभी यूनिक्स की तरह गोले (अच्छी तरह से लगभग सभी) में उपलब्ध हैं।

    आप अपने मूल्य वापस टिक्स पात्रों के अंदर आदेशों पैदा करने, यानी

    $ a=`echo 1+1 | bc -l` 
    $ echo $a 
    2 
    $ 
    
  2. आधुनिक, कम भद्दा लग रही है, आसानी से nestable cmd-प्रतिस्थापन $(cmd) के साथ आपूर्ति की, यानी

    $ a=$(echo 1+1 | bc -l) 
    $ echo $a 
    2 
    $ 
    
संलग्न

आपकी 'शे-बैंग' लाइन कहती है, #!/bin/sh, इसलिए यदि आप वास्तविक यूनिक्स प्लेटफ़ॉर्म पर चल रहे हैं, तो संभव है कि यह आपके /bin/sh मूल बोर्न शैल है, और इसके लिए आपको ऊपर विकल्प 1 का उपयोग करने की आवश्यकता होगी।

यदि आप अभी भी #!/bin/sh का उपयोग करते हुए विकल्प 2 का प्रयास करते हैं और यह काम करता है, तो आपके पास आधुनिक खोल है। echo ${.sh.version} या /bin/sh -c --version टाइप करने का प्रयास करें और देखें कि क्या आपको कोई उपयोगी जानकारी मिलती है या नहीं। यदि आपको संस्करण संख्या मिलती है, तो आप उन अतिरिक्त सुविधाओं के बारे में जानना चाहेंगे जो नए गोले होते हैं। नई सुविधाओं के

भाषण, यदि आप वास्तव में पार्टी का उपयोग कर रहे, zsh, ksh93 +, तो आप अपने नमूना कोड के रूप में

a=$((1+1)) 

पुनर्लेखन कर सकते हैं या यदि आप गणित संचालन कर रहे हैं, वह सब के अंदर रहना होगा (bc साथ जबकि आप कर सकते हैं) या तो मामले में

((b=1+1)) 
echo $b 
2 

, तो आपको अतिरिक्त प्रक्रिया निर्माण से बच सकते हैं, लेकिन आप खोल में चल बिन्दु गणित नहीं कर सकते: गुंजाइश, आप की तरह खोल सुविधा गणित का उपयोग कर सकते हैं।

+0

वंडरफुल स्पष्टीकरण। Thx बहुत ज्यादा। ठीक काम करता है! – GarouDan

संबंधित मुद्दे