为什么我的 bash 函数返回错误的值?

2024-04-03

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 "$?"

这是一个求数字阶乘的程序。输出在 5 以内都是正确的。6 的输出为 208,但正确答案为 720。是什么导致了此错误?


函数返回值最多只能达到 255:

a()
{
        return 255
}

a
echo $?

b()
{
        return 256
}

b
echo $?

生产:

$ bash x.sh
255
0

return就好像exit and exit只能取最大 255 的值(http://www.unix.org/whitepapers/shdiffs.html 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我的 bash 函数返回错误的值? 的相关文章

随机推荐