एक चर के लिए बीसी के परिणाम कैसे पास करें


15

मैं एक पटकथा लिख ​​रहा हूं और मैं bcएक चर में से परिणाम पारित करना चाहूंगा । मैंने 2 चर ( var1और var2) घोषित किए हैं और उन्हें मान दिया है। अपनी स्क्रिप्ट में मैं परिणामों bcको दूसरे चर से कहना चाहता हूं var3ताकि मैं var3अन्य गणनाओं के साथ काम कर सकूं। अब तक मैं एक फाइल का परिणाम लिख पाया हूं, जो वह नहीं है जिसकी मैं तलाश कर रहा हूं और साथ ही मैं टर्मिनल में परिणाम को प्रतिध्वनित करने में सक्षम हो गया हूं, लेकिन मैं केवल एक चर के लिए परिणाम को पारित करना चाहता हूं ताकि मैं उस चर के साथ काम कर सकता हूं।

echo "scale=2;$var1/var2" | bc

जवाबों:


23

यदि आप बैश का उपयोग कर रहे हैं, तो आप पाइप के बजाय यहां स्ट्रिंग का बेहतर उपयोग करेंगे:

bc <<< "scale=2;$var1/$var2"

यह आपको एक उपधारा बचा लेगा।

फिर, कमांड के आउटपुट को स्टोर करने के लिए, कमांड प्रतिस्थापन का उपयोग करें:

answer=$(bc <<< "scale=2;$var1/$var2")

संपादित करें।

यदि आप यहां से भी कुछ ठंडा चाहते हैं bc, तो यहां का dc (रिवर्स पॉलिश कैलकुलेटर):

answer=$(dc <<< "2k $var1 $var2/p")

1
हां मैं बैश का उपयोग कर रहा हूं, क्या आप उपधारा पर स्पष्ट कर सकते हैं? क्या कोई नुकसान है?
शाओलिन

2
हर बार जब आप पाइप |का उपयोग करते हैं, तो पाइप के दाईं ओर कमांड एक सब-टाइम में निष्पादित होती है, और यह एक नया सब-ओपन खोलने के लिए संसाधन लेता है (यह उस कमांड को निष्पादित करने के लिए बैश का एक नया उदाहरण खोलने जैसा है)। अगर आप इससे बच सकते हैं, तो इससे बचें। इधर, पाइप एक echoकरने के लिए bcआदेश चलेंगे bcएक subshell में और है, कुछ अर्थों में, मंद (कोई अपराध) के बाद से पार्टी अद्भुत यहाँ-स्ट्रिंग निर्माण किया है <<<इस तरह की बेवकूफ बातों से बचने के लिए।
gniourf_gniourf

@gniourf_gniourf फिर, यदि आपने संसाधन उपयोग की परवाह की है, तो आप /bin/shबैश के बजाय (डैश) का उपयोग करेंगे , लेकिन डैश में नहीं है <<<
गाइल्स का SO- बुराई का होना बंद करो '

सहायक जानकारी के लिए आपका धन्यवाद!! संसाधनों और उपधाराओं के संरक्षण के बारे में जानने के लिए यह अच्छी जानकारी है। मैं आपके इनपुट की बहुत सराहना करता हूं।
शाओलिन

1
@ गिल्स के time for i in {1..10000}; do : <<< ""; doneसाथ तुलना करें time for i in {1..10000}; do echo "" | : ; done, आपको एक नाटकीय अंतर दिखाई देगा। फिर आप सही कह रहे हैं, एक हेरेडोक एक हेस्ट्रिंग की तुलना में थोड़ा तेज है। लेकिन वन-लाइनर के रूप में टाइप करना अधिक अजीब है।
गनीउर्फ_निगौरीफ

9

कमांड प्रतिस्थापन एक कमांड के आउटपुट को एक चर में संग्रहीत करता है।

var3=$(echo "scale=2;$var1/$var2" | bc)

धन्यवाद! यह मुझे ठीक उसी जगह पर मिला जहाँ मैं चाहता था, शायद एक घंटे के शोध के बाद। धन्यवाद
शाओलिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.