2014-09-25 23 views
5

मैं बैश का शुरुआत कर रहा हूं। मैं एक संख्या के वर्ग की गणना करने के लिए एक स्क्रिप्ट लिखता हूं। जब संख्या 16 से कम नहीं है, तो यह गलत है ... खोल के लिए कोई छोटा या लंबा प्रकार नहीं है। तो खोल में सबसे बड़ी संख्या क्या है?बैश- जब मैं 16 का वर्ग प्राप्त करने का प्रयास करता हूं, तो यह गलत है

1--1 
2--4 
3--9 
:::: 
15-225 
16-0 
17-33 
18-68 

कोड है:

#!/bin/bash 
square() { 
     let "res=$1*$1" 
     return $res 
} 
as=16 
square $as 
result=$? 
echo $result 
exit 0 
+0

गूंज "17 * 17" | बीसी –

+1

शेल फ़ंक्शन का रिटर्न वैल्यू पूरी तरह से त्रुटि शर्तों को इंगित करने के लिए है, कॉलर को डेटा वापस नहीं कर रहा है। – chepner

उत्तर

16

एक प्रक्रिया से वापसी कोड 8 बिट (बिट्स के बाकी की तरह मेटा जानकारी है तक सीमित है "था वहाँ एक कोर डंप?" और " एक संकेत प्रक्रिया को मारने की थी? ") है, तो आप का उपयोग करने के लिए कि मूल्यों से 255

तो सभी मूल्यों सापेक्ष हो जाएगा अधिक से अधिक प्राप्त करने के लिए सक्षम नहीं होगा 256.

16^2 = 256 % 256 = 0 
17^2 = 289 % 256 = 33 
18^2 = 324 % 256 = 68 
: 
22^2 = 484 % 256 = 228 
23^2 = 529 % 256 = 17 

इसके बजाय, उत्पादन बजाय वापसी कोड पर कब्जा का प्रयास करें:

#!/bin/bash 
square() { 
     let "res=$1*$1" 
     echo $res  # echo answer rather than return 
} 
as=16 
result=$(square $as)  # capture echo rather than $? 
echo $result 
exit 0 
+0

अगर मैं आपको इस उत्तर पर दूसरी बार वोट दे सकता हूं, तो मैं करूँगा! –

+0

@ थॉमस - यह आपके लिए किया था। (हालांकि अब मेरे लिए कोई वोट नहीं छोड़ा गया है) – chiccodoro

+0

@chiccodoro जो एक अनंत लूप है! –

संबंधित मुद्दे

 संबंधित मुद्दे