请教一个关于递归的问题(Linux Shell)

来源:百度知道 编辑:UC知道 时间:2024/06/20 03:02:46
简要代码如下:

dir_list()
{
for subpath in `ls $1`
do
if[ -d "$1/$subpath" ];then
echo $subpath
toppath=$(($1/$subpath))
dir_list $toppath
else
echo $subpath
fi
done
}

这段程序作用是递归遍历参数$1的目录内的文件和文件夹,程序是可以正常运行的(可能上面这段有问题,这是我从源程序中抽出来的,没测试),我不太明白的是$toppath 变量的值
举个例子:
比如现在要遍历dir这个目录,里面结构为 /d1/f1、/f2 ,当递归到f1后toppath值应该是/d1 ,但以后再读到f2的时候toppath值却到了上层目录/ ,而程序中并没用处理过toppath啊,请问这是什么原因呢?
可能描述的不是很清楚,就是说toppath的值不应该是每碰到一个目录就加到后面么?怎么还能变成上级目录?
谢谢大家
有一句写错了
toppath=$(($1/$subpath))
应该是
toppath="$1$subpath"

toppath是个全局变量
===================
谢谢 jj27ll 的回答,但是没说清楚我的问题啊
拿你的例子来说 ,当toppath = dir/d1/f1 后,如果dir下还有d1的平级目录d2的话,toppath = dir/d1/f1 是如何变成toppath = dir/d2的,它只可以再后面加subpath啊,应该是toppath = dir/d1/f1/d2啊?

就是说遍历目录 $1 , 如果是文件,就echo文件名;
如果是目录,则把子目录($1/subpath) 作为 toppath,
再调用 dir_list 进行递归。

对于
dir|d1|f1
|f2
ls -l dir
--------------
d1
--------------
subpath = d1
$1/$subpath = dir/d1
toppath = dir/d1
dir_list dir/d1 递归调用

$1 = dir/d1(可能这个地方需要注意一下)
ls -l
--------------
f1
f2
--------------
第一次循环
subpath = f1
$1/$subpath = dir/d1/f1
toppath = dir/d1/f1
第二次循环
subpath = f2
toppath = dir/d1/f2

=========================

我用的就是你的例子阿
dir/d1 下有文件(目录) f1,f2
就是说 ls dir/d1
-------------------
f1
f2
-------------------
可能上面我没说清楚,呵呵。
________________________________________________

目录结构
$ ls -lR /dir
/dir:
total 0
drwxr-xr-x+ 2 GoldenRatio None 0 Nov 27 23:15 d1
drwxr-xr-x+ 2 GoldenRatio None 0 Nov 27 23:15 d2

/dir/d1:
total 0
-rwx------