我是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文件夹,但它不会追溯并创建其他文件夹。我觉得它没有完成方法调用堆栈而不是返回并完成方法,它只是在它自己调用之后退出。任何帮助将不胜感激!
答案 0 :(得分:3)
如果以递归方式调用函数,则需要声明变量local
:
local i
local numLevels=$1
local numPerLevel=$2
[...]
否则他们将被“内部”电话覆盖。