Bash 递归方法未完成方法调用堆栈
Bash Recursive Method not Finishing Method Call Stack
我是 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=
numPerLevel=
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文件夹,但它不会回溯并创建其他文件夹。我觉得它没有完成方法调用堆栈,而不是返回并完成方法,它只是在调用自身后退出。如有任何帮助,我们将不胜感激!
如果递归调用函数,您需要声明变量local
:
local i
local numLevels=
local numPerLevel=
[...]
否则它们将被 "inner" 调用覆盖。
我是 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=
numPerLevel=
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文件夹,但它不会回溯并创建其他文件夹。我觉得它没有完成方法调用堆栈,而不是返回并完成方法,它只是在调用自身后退出。如有任何帮助,我们将不胜感激!
如果递归调用函数,您需要声明变量local
:
local i
local numLevels=
local numPerLevel=
[...]
否则它们将被 "inner" 调用覆盖。