递归调用脚本

递归调用脚本

我正在尝试制作一个脚本来列出给定目录中的所有文件和目录。我想让这个脚本调用自身,最后显示所有文件和目录。我知道你可以轻松地做到这一点寻找, 但是我要练习递归脚本,我不知道为什么我的递归给定参数不是我所期望的,它的值没有改变。

for source in `find $1 -maxdepth 1 -type d,f`
do
        if [ -f $source ]; then
                echo "`basename $source` is a file"
        fi
        if [ -d $source ]; then 
                echo "`basename $source` is a directory"
                . Script.sh $source
        fi
done

答案1

下面这行是罪魁祸首:

. Script.sh $source

虽然您可以想象以这种方式进行递归,但它很难推理,因为下一级递归更改的变量也会在调用者中更改。也许您只想调用它而不获取它:

Script.sh $source

或者,更好的是:

"$0" "$source"

不过,在所有情况下可靠地获取源脚本有点棘手。更好的是使用函数进行递归(在 Bash 中):

function f()
{
   ...
   f different_args
   ...
}

f并声明as中使用的任何变量local,这样它们就不会因对 的递归调用而改变f

相关内容