2015-10-28 100 views
-1

用戶將輸入3個數字,我想計算這些數字的羅馬數值。我複製粘貼to_roman()函數,但它需要3個參數。我很困惑 。那麼我在case語句中調用這個函數。我如何實現3個數字的這個函數?任何實施建議?shell腳本中的調用函數

to_roman() # Must declare function before first call to it. 
{ 
number=$1 
factor=$2 
rchar=$3 
let "remainder = number - factor" 
while [ "$remainder" -ge 0 ] 
do 
echo -n $rchar 
#echo $remainder 
let "number -= factor" 
let "remainder = number - factor" 
done 

return $number  
} 

to_roman $num 10 x 
num=$? 
to_roman $num 9 ix 
num=$? 
to_roman $num 5 v 
num=$? 
to_roman $num 4 iv 
num=$? 
to_roman $num 1 i 
+2

返回值不適用於shell函數中的數據;它們表示成功(0)或失敗(一個非零值,其含義是特定於該函數的)。一個函數應該輸出一個結果,它可以用命令替換來捕獲:'num = $(to_roman $ num 10 x)'。 – chepner

+2

[這個「Number to Roman」shell腳本是如何工作的可能的重複](http://stackoverflow.com/questions/19619021/how-does-this-number-to-roman-shell-script-work) –

回答

4

你剛剛閱讀的函數參數如$1 $2 $3等。

$#是參數

根據您的實現總人數可能要遍歷所有的論據每@EitanReiner建議參數n支持。

它與[email protected]完成。例如:

for param in "[email protected]" 
do 
    echo "$param" 
done 

在你的情況下,它可能會是一個矯枉過正,因爲你只有3個參數。無論如何,你應該檢查你是否只有3個參數。

+1

還值得建議循環參數支持'n'參數。 –

+1

謝謝,我已經更新了答案。 –

+0

對不起,但我不明白你的意思是什麼:你只是閱讀像$ 1 $ 2 $ 3等功能的參數。 ?有這個功能的 – esrtr