while循环在调用函数后结束

时间:2015-10-21 15:47:06

标签: bash unix

我试图创建一个素数分解函数(递归),我的问题是while循环在调用函数本身后结束。

代码:

primeFactors(){
    if isPrime $1; then
        echo "$1"
    else
        i=2
        sqrtnum=`echo "sqrt($1)"|bc`
        while [ $i -lt $sqrtnum ]
        do
            echo "I: $i sqr: $sqrtnum"
            j=$(($1%i))
            if isPrime $i && [ $j -eq 0 ]
            then
                echo "$i"
                num=$(($1/$i))
                primeFactors $num
            fi
            let i++
        done
    fi
}

输出就是这个

I: 2 sqr: 10
2
I: 2 sqr: 7
2
I: 2 sqr: 5
I: 3 sqr 5
I: 4 sqr 5

1 个答案:

答案 0 :(得分:3)

您的变量是全球性的。

稍后的函数调用会覆盖先前的分配。

您需要制作变量local

set -x添加到脚本顶部以查看实际运行的内容。