在Shell中即使在函数体内创建的变量,也是全局变量!!! 来看一段代码
这是一个递归函数, 简单解释一下,脚本的执行过程。
- 调用了test函数并传递字符串参数
"1 2 3"。 - 函数体内用
list接收参数。调用系统函数把list为数组赋值给arr。 - 递归跳出条件是:数组长度为0
- 循环调用函数
test,注意这里我没给test传参,意味着循环体内每次调用test都会由于参数转为数组后是个空数组而退出。避免无线递归调用。
脚本预期执行结果应该是
arr[0]=1
0
arr[1]=2
0
arr[2]=3
0
但实际结果确是:
2和3 哪去了??在苦苦查询资料后一句话惊醒了我。Shell中在函数体内创建的变量,也是全局变量!!!要创建局部变量只需要在变量前加个关键字local即可。