fact()
{
if [ $1 -eq 1 ]
then
return 1
else
y=`expr $1 - 1`
fact $y
b=$(($1 * $?))
return $b
fi
}
echo "enter"
read n
fact $n
echo "$?"
Run Code Online (Sandbox Code Playgroud)
这是一个查找数字阶乘的程序.输出最正确为5.输出6为208,但正确答案为720.导致此错误的原因是什么?
函数返回值最多只能达到255:
a()
{
return 255
}
a
echo $?
b()
{
return 256
}
b
echo $?
Run Code Online (Sandbox Code Playgroud)
生产:
$ bash x.sh
255
0
Run Code Online (Sandbox Code Playgroud)
return
就像,exit
并且exit
最多只能取值255(http://www.unix.org/whitepapers/shdiffs.html).
一种替代方案是切换到迭代建议,如另一个答案中所述.或者,您可以使用echo并以这种方式捕获递归输出:
#!/bin/bash
fact()
{
if [ $1 -eq 1 ]
then
echo 1
else
y=$(expr $1 - 1)
f=$(fact $y)
b=$(($1 * $f))
echo $b
fi
}
echo "enter"
read n
fact $n
Run Code Online (Sandbox Code Playgroud)