留意shell变量作用域

shell变量的作用域大部分都是全局的。这点非常不好。经常会造成意想不到的后果。所以强烈建议在定义每一个变量时都先声明为local的。

举例如下:

f1.sh:

function f1() {
        line="f1,hhaha"
}

f2.sh

function f2() {
        local line=""
        read line
        echo $line
}


test.sh

#! /bin/sh
. f1.sh 
. f2.sh
line="main"
f1
echo $line
f2
echo $line



然后运行:sh -x test.sh  

输出如下:

+ . f1.sh
+ . f2.sh
+ line=main
+ f1
+ line=f1,hhaha
+ echo f1,hhaha
f1,hhaha
+ f2
+ local line=
+ read line
hey 
+ echo hey
hey
+ echo f1,hhaha

f1,hhaha



可见,f1中的line把原来的line值覆盖了。而f2中使用了local就不会产生这种情况。

还有,一些变量特别容易忽略,如 read line。此时line是一个全局变量。必须在开始声明

local line

再调用read line。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值