दिलचस्प पोस्ट
एक निर्माता के रूप में __init__? क्रॉस-ब्राउज़र XmlHttpRequest को पुनः प्राप्त करने का सबसे आसान तरीका Url / src / href विशेषता में दो फॉरवर्ड स्लैश वेबस्कॉट क्लाइंट API में HTTP शीर्षलेख IOS7 में UIAlertView ऐडस्यूबव्यू एंड्रॉइडस्ट्यूडियो ग्रेडिंग प्रॉक्सी जहां जेएसपी जावा (* __ jsp.java) फ़ाइलों को संकलित किया जाता है? शेल प्रोग्रामिंग में $ (command) और `command` के बीच अंतर क्या है? यूआरएल सत्यापन के लिए नियमित अभिव्यक्ति (जावास्क्रिप्ट में) क्या आप यह निर्धारित कर सकते हैं कि क्रोम एक स्क्रिप्ट के माध्यम से गुप्त मोड में है? वॉली के साथ और एचटीपीटीटीटी के बिना काम करने वाले डाक बहुपयोगी अनुरोध जावा में एक 2d सरणी कॉपी करें सरणी पैरामीटर का आकार मुख्य के समान क्यों नहीं है? जावास्क्रिप्ट में एक वैरिएबल वैल्यू से ऑब्जेक्ट प्रॉपर्टी कैसे बनाऊं? WPF बनाम सिल्वरलाइट

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

मैं एक अस्थायी बिंदु चर की एक पूर्णांक को तुलना करना चाहता हूं। मुझे पता है कि यह सर्वश्रेष्ठ करने के लिए बाश के साथ नहीं है, लेकिन मेरी पूरी स्क्रिप्ट पहले से ही बाश में लिखी गई है। $ संख्या किसी भी पूर्णांक हो सकती है यदि यह नीचे या 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

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

बास फ़्लोट को नियंत्रित नहीं कर सकते इसके बजाय 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