在shell 编程中,对 bash 变量作用域的理解是非常重要的,特别是在某些函数会被多次调用的情况,如果在函数中定义的是全局变量,就会导致下一次调用的时候,出现错误的逻辑的时候不容易发现。
bash的变量分成三种:
- 局部变量,使用local 声明。
- 全局变量,在当前shell文件中可用, 没有声明local的变量就是全局变量, 默认是全局变量。
- 环境变量。
bash
function fun()
{
# a global variable
a=10
# local variable
local b=20
}
fun
# 能够访问全局变量,打印就是10
echo "${a}"
# 不能访问局部变量,这里打印就是一个空值
echo ${b}
编码建议: 在函数尽量使用局部变量进行操作。
一种特别的错误,for 循环中的全局变量:
bash
function test()
{
a="var run test"
# 这里的v 是一个全局变量,如果后续有同名的调用,可能导致值被覆盖
for v in $a; do
echo $v
done
}
test
# test
echo $v
其中一个比较好的解决办法是将v声明为局部变量。