shell 递归方法中变量被修改问题解决方案

现象

用shell脚本实现一个递归遍历目录树结构的方法,发现只能从第一层目录往下遍历有点奇怪,执行 sh -x <脚本名> 命令在debug调试模式下发现变量的值被改变了. 具体表现就是: 上层函数,调用下层函数的时候,下层函数中的值变了后,再返回上层调用,结果其值没有恢复,即父级函数调用子级函数,子级函数中改变了某变量的值,返回父级函数后,父级函数中的值,也被改变了。

原因

Linux shell中,定义的函数变量,默认是全局global的,即使是在函数中定义的变量,也是。所以,递归函数中的变量,由于多数都是局部变量,导致下一层调用中修改了某个变量之,返回上一层后,同一个变量的值,也同时被改变了,所以导致运行结果不对。

解决办法

解决办法就是,把(递归函数中的)所有的变量之前加上local定义,表示局部变量,这样运行的结果,和函数执行逻辑,就和C等其他语言类似,结果也就都正确了。
例如:

# bash: 
fun () { 
local abc 
..
} 
# ksh: 
fun () { 
typeset abc 
..
} 

参考

https://www.cnblogs.com/cdyboke/p/6553530.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值