2015-10-28 59 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