2014-09-25 2 views
5

Ich bin ein Anfänger von bash. Ich schreibe ein Skript, um das Quadrat einer Zahl zu berechnen. Wenn die Zahl nicht kleiner als 16 ist, ist es falsch ... Es gibt keinen kurzen oder langen Typ für die Shell. Also, was ist die größte Zahl in der Shell?Bash-wenn ich versuche, das Quadrat von 16 zu bekommen, ist es falsch

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

Der Code ist:

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

echo "17 * 17" | bc –

+1

Der Rückgabewert einer Shell-Funktion dient ausschließlich dazu, Fehlerzustände anzuzeigen und keine Daten an den Aufrufer zurückzugeben. – chepner

Antwort

16

Der Rückgabecode von einem Prozess auf 8 Bit beschränkt ist (der Rest der Bits haben Meta-Informationen wie "gab es einen Core-Dumps?" Und " hat ein Signal, um den Prozess töten? "), so dass Sie das nicht nutzen können, um Werte zu erhalten größer als 255

so werden alle Werte modulo werden 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 

Stattdessen versuchen die Ausgabe anstatt den Return-Code erfassen:

#!/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

Wenn ich Sie ein zweites Mal über diese Antwort abstimmen könnte, würde ich! –

+0

@Thomas - tat es für dich. (Es gibt jedoch keine Stimme mehr für mich) – chiccodoro

+0

@chiccodoro das ist eine Endlosschleife! –

Verwandte Themen