दिलचस्प पोस्ट
jQuery – कैसे अजाक्स के माध्यम से JSON डाल करने के लिए? स्टोरीबोर्ड का उपयोग किए बिना मैं एक नया स्विफ्ट प्रोजेक्ट कैसे बनाऊं? पायथन – एक पाश के अंदर के पिछले और अगले मान ?? नल Coalescing ऑपरेटर -> क्या मतलब है coalingcing? यह सुनिश्चित करने के लिए त्वरित और गंदी तरीका है कि एक खोल स्क्रिप्ट का केवल एक उदाहरण एक समय में चल रहा है साधारण अभिव्यक्ति के साथ PHP वर्ग गुण घोषणाओं को आरंभ करने से वाक्यविन्यास त्रुटि उत्पन्न होती है कैसे काम करता है इष्ट, स्थिर और स्वस्थ कुंजीशब्द प्रभाव व्यवहार? मैं कैसे दायित्वों को पुनः लोड करने के लिए मजबूर कर सकता हूं? एक सदस्य की जांच करना संभवतः आधार वर्ग, सी ++ 11 संस्करण में मौजूद है वीबीए का प्रयोग करके सभी सबफ़ोल्डर्स के माध्यम से लूप सब कुछ एक अजगर में रूबी की तरह वस्तु है? एंड्रॉइड स्टूडियो – कोई जेवीएमएम स्थापना नहीं मिली पायथन: किसी FTP सर्वर पर फ़ाइल डाउनलोड करें क्लाइंट साइड से कई बार सबमिट करने से फॉर्म को कैसे रोकें? फ़ाइल की परमाणुता

बाँस में वैरिएबल के साथ फ़्लोटिंग प्वाइंट कॉन्ट्रैक्ट

मैं एक अस्थायी बिंदु चर की एक पूर्णांक को तुलना करना चाहता हूं। मुझे पता है कि यह सर्वश्रेष्ठ करने के लिए बाश के साथ नहीं है, लेकिन मेरी पूरी स्क्रिप्ट पहले से ही बाश में लिखी गई है। $ संख्या किसी भी पूर्णांक हो सकती है यदि यह नीचे या 50 के बराबर है, तो मैं आउटपुट 1 चाहता हूं, अन्य सभी के लिए मैं अन्य चर के साथ एक आउटपुट चाहता हूं। अभी तक मेरे पास इतना ही है:

number=43 test=$(echo "scale=2; $number/50" | bc -l) echo "$test" for k in {1..5} do if ["$test" -le 1] then echo "output" elif ["$test" -gt $k] then echo "output$k" fi done 

अगर मैं परीक्षण = 0.43 के साथ कोशिश करता हूँ, तो पहले लूप भी काम नहीं करता। मुझे लगता है कि यह एक पूर्णांक और एक अस्थायी बिंदु की तुलना के साथ करना है, लेकिन इसे काम नहीं कर सकता।

जो कुछ मैं याद कर रहा हूँ?

पी एस: यह [0.43: command not found जो टर्मिनल आउटपुट है I

Solutions Collecting From Web of "बाँस में वैरिएबल के साथ फ़्लोटिंग प्वाइंट कॉन्ट्रैक्ट"

बास फ़्लोट को नियंत्रित नहीं कर सकते इसके बजाय bc को पाइप करें:

 if [ $(echo " $test > $k" | bc) -eq 1 ] 

आप जो भी त्रुटि देखते हैं, वह है क्योंकि test आदेश (यानी) को पहले और बाद में रिक्त स्थान की आवश्यकता होती है

इसका उपयोग करने के लिए बेहतर (( ... )) क्योंकि आप इस तरह से संख्याओं की तुलना करते हैं:

 if (( $(bc <<< "$test > $k") )) 

लूप का हिस्सा इस तरह दिखना चाहिए:

 if (( $(bc <<< "$test <= 1") )) then echo "output" elif (( $(bc <<< "$test > $k") )) then echo "output$k" fi 

रिलेशनल एक्सप्रेशन 0 का मूल्यांकन करते हैं, यदि रिलेशन गलत है, और 1 अगर रिलेशनशिप सच है [ स्रोत ]। नोट हालांकि यह GNU bc का एक व्यवहार है, और यह POSIX compiant नहीं है।

एक पुराने प्रश्न की तरह, लेकिन यह एक अतिरिक्त उत्तर मुझे लगता है।

जबकि एक उच्च परिशुद्धता कैलकुलेटर (बीसी या डीसी) के लिए पाइपिंग काम करता है, यह एक कांटा और एक अतिरिक्त प्रक्रिया की लागत पर है, क्योंकि उन कैलकुलेटर bash में नहीं बने हैं। एक बात जो कि में बनाया गया है, हालांकि, printf इसलिए यदि आप अपने अंकों को किसी विशेष संख्या में दशमलव स्थान के भीतर सौंप सकते हैं, तो आप इस तरह से एक समारोह के साथ "नकली" चल बिन्दु तुलना कर सकते हैं:

 #!/usr/bin/env bash function [[[ () { local LANG=C lhs rhs printf -v lhs '%07.3f' "$1"; lhs=${lhs/./} printf -v rhs '%07.3f' "$3"; rhs=${rhs/./} case "$2" in -lt) return $(( ! ( 10#$lhs < 10#$rhs ) )) ;; -le) return $(( ! ( 10#$lhs <= 10#$rhs ) )) ;; -eq) return $(( ! ( 10#$lhs == 10#$rhs ) )) ;; -ge) return $(( ! ( 10#$lhs >= 10#$rhs ) )) ;; -gt) return $(( ! ( 10#$lhs > 10#$rhs ) )) ;; esac } number=${1:-43} test=$(dc -e "2k $number 50 / p") echo "$test" for k in {1..5}; do if [[[ "$test" -le 1 ]]]; then echo "output" elif [[[ "$test" -gt "$k" ]]]; then echo "output $k" fi done 

यहाँ पर विचार करने के लिए कुछ चीजें

  • मैंने फ़ंक्शन का नाम दिया है [[[ प्यारा होना आप जो भी चाहें उसे नाम दे सकते हैं ntest या mynumericcomparison या यहां तक ​​कि [[[
  • printf एक आंतरिक कार्य है जो कि बाश के भीतर है, इस तथ्य के बावजूद कि यह आपके रास्ते पर है, इसके लिए एक कांटा की कीमत नहीं है।
  • जैसा कि यह खड़ा है, फ़ंक्शन 999.9 99 तक नंबर का समर्थन करता है। यदि आपको अधिक संख्या (या अधिक सटीकता) की आवश्यकता है, तो printf स्वरूपों को समायोजित करें।
  • case स्टेटमेंट के अंदर प्रत्येक वेरिएबल की शुरुआत में 10# आधार 10 पर होने वाली तुलना को बल देना है, क्योंकि शून्य-गद्देदार संख्या अन्यथा अष्टक के रूप में व्याख्या की जा सकती है।

यह भी देखें: http://mywiki.wooledge.org/BashFAQ/022