हम अपने लैब प्रयोग में इनपुट प्रदान करने के लिए एक सीरियल टर्मिनल का उपयोग कर रहे हैं। मैंने पाया कि उपयोग करना
$ echo "5X5"
सिर्फ एक स्ट्रिंग देता है "5X5"
। क्या एक गुणन ऑपरेशन को निष्पादित करने की आज्ञा है?
हम अपने लैब प्रयोग में इनपुट प्रदान करने के लिए एक सीरियल टर्मिनल का उपयोग कर रहे हैं। मैंने पाया कि उपयोग करना
$ echo "5X5"
सिर्फ एक स्ट्रिंग देता है "5X5"
। क्या एक गुणन ऑपरेशन को निष्पादित करने की आज्ञा है?
जवाबों:
हां, आप कुछ सरल गणित करने के लिए बैश के बिल्ट-इन अरिथमेटिक एक्सपेंशन का$(( ))
उपयोग कर सकते हैं
$ echo "$((5 * 5))"
25
ऑपरेटरों की एक पूरी सूची के लिए बैश संदर्भ मैनुअल में शेल अंकगणित अनुभाग की जाँच करें ।
पूर्णता के लिए, जैसा कि अन्य ने बताया है, यदि आपको मनमानी परिशुद्धता की आवश्यकता है, bc
या dc
बेहतर होगा।
बैश अंकगणितीय विस्तार के साथ समर्थन करता है $(( expression ))
। उदाहरण के लिए:
$ echo $(( 5 * 5 ))
25
उपयोगिताओं की एक संख्या अंकगणितीय प्रदान करती है, जिसमें bc और expr शामिल हैं ।
$ echo '5 * 5' | /usr/bin/bc
25
$ /usr/bin/expr 5 \* 5
25
शास्त्रीय समाधान है:
expr 5 \* 5
एक और अच्छा विकल्प है:
echo 5 5\*p | dc
ये दोनों समाधान केवल पूर्णांक ऑपरेंड के साथ काम करेंगे।
k
। मुझे निश्चित रूप से डिफ़ॉल्ट परिशुद्धता 0 (पूर्णांक के लिए छंटनी) याद है। क्या मैं गलत-सही याद कर रहा हूं, या क्या यह सिर्फ इतना है कि नए कार्यान्वयन ने व्यवहार को बदल दिया है?
dc
वर्षों से शायद ही कभी इस्तेमाल किया है क्योंकि मैं अधिक बीजीय और कम आरपीएन हूं इसलिए मुझे याद नहीं है। जीएनयू सिस्टम मैं उपयोग कर रहा हूं, पर डिफ़ॉल्ट 0. है। एक पुराना (1993) फ्रीबीएसडी man
पृष्ठ में डिफ़ॉल्ट शून्य होने का उल्लेख है, लेकिन पुराने बीएसडी man
पृष्ठ नहीं हैं।
echo '4 k 50.5 7 / p' | dc
काम करें (आउटपुट:) 7.2142
।
मैं इस फ़ंक्शन का उपयोग करता हूं जो उपयोग करता है bc
और इस प्रकार फ्लोटिंग पॉइंट गणनाओं का समर्थन करता है:
c () {
local a
(( $# > 0 )) && a="$@" || read -r -p "calc: " a
bc -l <<< "$a"
}
उदाहरण:
$ c '5*5'
25
$ c 5/5
1.00000000000000000000
$ c 3.4/7.9
.43037974683544303797
बैश के अंकगणितीय विस्तार फ्लोट्स का समर्थन नहीं करता है (लेकिन कोर्न शेल और ज़श करते हैं)।
उदाहरण:
$ ksh -c 'echo "$((3.0 / 4))"'
0.75
मेरे पास इसके लिए एक सरल स्क्रिप्ट है जिसका मैं उपयोग करता हूं:
me@mycomputer:~$ cat /usr/local/bin/c
#!/bin/sh
echo "$*" | sed 's/x/\*/g' | bc -l
यह तब से बदल x
जाता है *
जब *
शेल में एक विशेष चरित्र होता है। इसे निम्नानुसार उपयोग करें:
c 5x5
c 5-4.2 + 1
c '(5 + 5) * 30'
(आप अभी भी उद्धरण का उपयोग करने के लिए अगर अभिव्यक्ति में कोई कोष्ठक हैं)।tr
कई पात्रों के लिए चरित्र मानचित्रण करने के लिए इस्तेमाल किया जा सकता है।
यदि आपको अजगर पसंद है और आपके पास पैकेज स्थापित करने का विकल्प है, तो आप इस उपयोगिता का उपयोग कर सकते हैं जो मैंने बनाया था।
# install pythonp
python -m pip install pythonp
pythonp "5*5"
25
pythonp "1 / (1+math.exp(0.5))"
0.3775406687981454
# define a custom function and pass it to another higher-order function
pythonp "n=10;functools.reduce(lambda x,y:x*y, range(1,n+1))"
3628800
dc
फ्लोट्स के साथ काम करता है। कोशिश करोecho '4 k 50 7 / p' | dc
। आउटपुट है7.1428
।k
आदेश परिशुद्धता सेट।