2014-09-25 6 views
5

Jestem początkującym bash. Piszę skrypt, aby obliczyć kwadrat liczby. Kiedy liczba jest nie mniejsza niż 16, jest źle ... Nie ma krótkiego lub długiego typu powłoki. Więc jaka jest największa liczba w powłoce?Bash - kiedy próbuję uzyskać kwadrat 16, to jest źle

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

Kod jest:

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

echo "17 * 17" | bc –

+1

Zwracana wartość funkcji powłoki jest przeznaczona wyłącznie do wskazywania warunków błędu, a nie zwracania danych do wywołującego. – chepner

Odpowiedz

16

Kod zwrotny z procesu jest ograniczona do 8 bitów (reszta bitów mają meta-informacje jak „tam rdzeń zrzucić?” I " czy sygnał zabić proces? "), dzięki czemu nie będą mogli używać, aby uzyskać wartości większe niż 255.

więc wszystkie wartości zostaną modulo 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 

Zamiast próbować uchwycić wyjście zamiast kodu powrotu:

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

Gdybym mógł po raz drugi zagłosować na tę odpowiedź, zrobiłbym to! –

+0

@Thomas - zrobiłem to za Ciebie. (jednak nie ma już dla mnie głosowania) – chiccodoro

+0

@chiccodoro to nieskończona pętla! –

Powiązane problemy