Linux的shell编程:题目要求写一个脚本能够基本达到ls -R这个命令的效果。

下面这两个脚本中,第一个运行正确,第二个错误。错误的显示与ls-R命令的差别分别是第三张和第四张图片。我的问题是:1、shell中的函数递归是不是不断打开子shell?比... 下面这两个脚本中,第一个运行正确,第二个错误。错误的显示与ls -R命令的差别分别是第三张和第四张图片。我的问题是:
1、shell中的函数递归是不是不断打开子shell?比如第一张图的第13行,$1会受到上一行的调用而改变吗?
2、第二个脚本的错误原因是什么?感觉整个脚本根本没进入循环啊!
新人刚学linux,诚心求大神告知!
展开
 我来答
jinxingvenus
推荐于2016-06-08 · TA获得超过4790个赞
知道大有可为答主
回答量:2703
采纳率:64%
帮助的人:3157万
展开全部
解答:
1,会受到改变,如果那行改成ls -l可以达到同样的目标,而且更易读一些。但是如果用List 就会调用一次List本身,就会改变目录位置,因此最后加一个CD $1回到主目录。

2,第二个List中的唯一区别是没有cd $1.就是说LS $1只能显示目录,但是不在目录下面。你怎么判断 -d,因此循环只在脚本目录里执行一次。又对应不了LS中的文件,所以看上去没有执行。
更多追问追答
追问
哇哦,原来不进入目录就不能判断的啊......get......

第一个还有疑问唉,既然$1在改变,那怎么会回到主目录......恕我愚昧,求教。
追答
$1在当前shell没变,变的是list函数子目录,就是进入了$1/$i
所以说用Ls 取代 list是合适的。

不进目录可以判断。应该是这样。 [ -d $1/$i ]
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式