2014-09-25 11 views
5

Başhekimdir. Bir num'in karesini hesaplamak için bir senaryo yazarım. Num 16'dan küçük değilse, yanlıştır ... Kabuk için kısa veya uzun tip yoktur. Peki, kabuktaki en büyük sayı nedir?Bash - 16 karesini almaya çalıştığımda, yanlış

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

kodudur:

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

yankı "* 17 17" | bc –

+1

Bir kabuk işlevinin dönüş değeri, yalnızca hata koşullarını göstermek, arayan kişiye veri göndermemek için tasarlanmıştır. – chepner

cevap

16

bir prosesten dönüş kodu 8 bitlik (geri kalan bitler gibi meta bilgisi için sınırlıdır "bir çekirdek çöp boşaltmak?" "Ve bir sinyali) "? sürecini öldürdü, bu yüzden Yani tüm değerler modulo edilecektir 255.

daha büyük değerleri almak için o kullanmak mümkün olmayacaktır 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 

Bunun yerine, çıktı ziyade dönüş kodu yakalamak deneyin:

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

Bu cevaba ikinci kez oy verebilirsem, yapardım! –

+0

@Thomas - sizin için yaptı. (Ancak şimdi benim için bir oy yok) – chiccodoro

+0

@chiccodoro bu sonsuz bir döngü! –