Bash递归方法不是整理方法调用堆栈

时间:2015-03-15 20:36:48

标签: bash for-loop recursion

我是Bash的新手,作为一个项目,我正在尝试创建一个将创建文件夹树的shell脚本。例如,如果我告诉它创建一个3个文件夹深度和4个宽度的树,那么它将创建一个标记为0,1和2的文件夹级别;然后在每个文件夹中创建文件夹0,1和2,依此类推,直到达到4级深度。 (这将创建4 ^ 3个文件夹。)

以下是我创建的方法的代码:

function createLevel () { #param1 = number of levels of folders, param2 = number of folders per level
    numLevels=$1
    numPerLevel=$2
    if [ $numLevels -eq 1 ];
    then
        for ((i=0; i < numPerLevel; i++));
        do
            mkdir $i
        done
    else
        for ((i=0; i < numPerLevel; i++));
        do
            mkdir $i
            cd $i
            createLevel $((numLevels - 1)) $numPerLevel
            cd ..
        done
    fi
}

它通常只创建一个分支,因此例如它将在0文件夹中的0文件夹中创建一个0文件夹,但它不会追溯并创建其他文件夹。我觉得它没有完成方法调用堆栈而不是返回并完成方法,它只是在它自己调用之后退出。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:3)

如果以递归方式调用函数,则需要声明变量local

 local i
 local numLevels=$1
 local numPerLevel=$2
 [...]

否则他们将被“内部”电话覆盖。