बैश क्यों सोचता है कि 010 8 है?


17

बैश नंबर 010 = 8 क्यों सोचता है?

x=010
echo $x
  010
echo $(( x+0 ))
  8
echo $(( x-2 ))
  6

मैंने सोचा कि यह द्विआधारी हो सकता है, लेकिन 010 = 10 = 2. तो यह 8 क्यों मिलता है, और मैं इसे कैसे सोच सकता हूं 010 = 10 (और 010 - 2 = 8)?


15
अग्रणी 0इसे अष्टाध्यायी बताता है। तुम सिर्फ करते हैं x=10तो echo $((x+0))तब पता चलता है 10। इसके अलावा, में अतिरिक्त के लिए कोई जरूरत नहीं $है ()
टेरेंस

2
कई संख्याओं में, का 010अर्थ है 8 क्योंकि 0सामने रखने का अर्थ है अष्टदल, इसी तरह 0xकुछ भाषाओं में डालने का अर्थ है हेक्स।
डेरेक 會 會 ere

9
प्रोग्रामिंग करते समय यह जानना वास्तव में एक महत्वपूर्ण बात है। ज्यादातर भाषाओं में 0ऑक्टल, 0xहेक्स और 0bबाइनरी को ट्रिगर किया जाता है ।
सेठ

डाउनवोट स्पष्टीकरण?
टिम

3
@ यह क्यों होगा, यह 8 नहीं होगा? ;-) ओह, मेरी डाउनवोट नहीं है, लेकिन शायद क्योंकि यह बहुत बुनियादी है। यह बहुत सामान्य व्यवहार है।
रिनविंड

जवाबों:


42

संख्या अनुक्रमों की शुरुआत 0अष्टक संख्याओं के रूप में होती है।
अष्टक 10= दशमलव 8

इसे दशमलव संख्या के रूप में मानने के लिए बैश पाने के लिए, प्रमुख शून्य को हटा दें या दशमलव को बलपूर्वक हटा दें:

N=010
N=$((10#$N))

आम तौर पर यह सभी आधारों के लिए काम करता है, बस 10उस आधार को बदलें जो आप चाहते हैं:

N=[base#]n

प्रश्न को हल करने के दो तरीकों से संपादित किया।
पाबी

1
@ यह करने के लिए कि आप $ {N%?} का उपयोग अंतिम अंक काटने के लिए कर सकते हैं और फिर $ {N: -} को रिक्त स्थान पर 0. से बदलने के लिए
random832

@ अगर ऐसा है तो मैं यह पता नहीं लगा सकता कि कैसे। $ {$ {N%?}: - 0} zsh में काम करता है, लेकिन bash या ksh में नहीं। (इसके अलावा, :-ऊपर मेरी टिप्पणी में :-0} होना चाहिए था
रैंडम 832

आपको अपने उत्तर में शामिल करना चाहिए कि आप किसी भी आधार को " फॉर्म [आधार #] n के साथ बाध्य कर सकते हैं , जहां आधार 2 और 64 के बीच एक दशमलव संख्या है, जो अंकगणितीय आधार का प्रतिनिधित्व करता है, और n उस आधार में एक संख्या है " स्रोत: bash ref
djeikyb
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.