![递归调用脚本](https://linux22.com/image/108109/%E9%80%92%E5%BD%92%E8%B0%83%E7%94%A8%E8%84%9A%E6%9C%AC.png)
我正在尝试制作一个脚本来列出给定目录中的所有文件和目录。我想让这个脚本调用自身,最后显示所有文件和目录。我知道你可以轻松地做到这一点寻找, 但是我要练习递归脚本,我不知道为什么我的递归给定参数不是我所期望的,它的值没有改变。
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
。