के बीच अंतर ठीक है तो यह एक हैकरैंक समस्या है (https://www.hackerrank.com/challenges/bash-tutorials---arithmetic-operations)। असल में, इनपुट एक अंकगणितीय अभिव्यक्ति है और मुझे स्वरूपित उत्तर (3 दशमलव स्थान) मुद्रित करना है। मैंने इसे पहलेprintf% .3f और बीसी राउंडिंग व्यवहार
read exp
echo "scale = 3; $exp" | bc -l
पर कई परीक्षण किए लेकिन पहले नहीं।
5+50*3/20 + (19*2)/7
उत्तर 17.929
है लेकिन मेरा कोड 17.928
पर प्रिंट करता है। मैं इस कोड की कोशिश की बजाय
read exp
printf "%.3f\n" `echo $exp | bc -l`
नोट: गूंज हिस्सा बैकटिक में होना चाहिए, लेकिन मैं '' ब्लॉक उद्धरण के साथ भ्रमित नहीं करने के लिए डाल दिया। सभी परीक्षण पास हुए। तो क्या अंतर है?
बैकटिक्स केवल एक पंक्ति से कम कोड स्वरूपण के लिए उपयुक्त हैं - बहुउद्देशीय खंडों के लिए, कोड स्वरूपण के लिए इंडेंटेशन का उपयोग करें (यदि कोड कोड क्लिक करते हैं तो जावास्क्रिप्ट संपादक आपके लिए क्या करेगा)। –
... वैकल्पिक रूप से, '\' ... \ '' के बजाय '$ (...)' का उपयोग करें - यह आधुनिक पॉज़िक्स वाक्यविन्यास है, और घोंसला से कम भ्रमित है। –
.... भी - 'echo "$ exp" | बीसी-एल', $ echo echo नहीं बीसी -एल'; यदि आपकी अभिव्यक्ति में '*' के आस-पास की जगहें हैं, तो आपको उद्धरण के बिना बहुत ही आश्चर्यजनक व्यवहार होगा (और यहां तक कि रिक्त स्थान के बिना, यदि आपके खोल में 'nullglob' विकल्प सक्षम है तो आपको आश्चर्यजनक व्यवहार होगा)। –