bash shell函数内的位置参数,全局与局部变量
话说,shell函数里既可以使用位置参数和特殊变量(昨天说的那些,$1,$2,$3。。。以及$*,$#,$@之类)。
其方式呢,与shell脚本一样。例如,定义如下内容的alice函数
{
echo "alice $*"
echo "$0: $1 $2 $3 $4"
echo "$# arguments"
}
呵呵,是不是和昨天的那个定义一样?废话,要是不一样的话咋体现出统一啊?呵呵。
鍵入alice in wonderland与昨天的结果一致:
/bin/bash: in wonderland
2 arguments
典型情况下,在一个sehll脚本里都要定义几个shell函数。
因此,每个函数都需要处理自己的参数,这表明每个函数都有这些变量的副本(即使函数并不像脚本运行 在其子shell里)
,我们称这些变量对函数是局部的(指这些位置参数与特殊变量)。
在函数内定义的其他变量则不是局部的,(为全局变量):
我们可以定义一个脚本,内容如下:
function afunc
{
echo in function: $0 $1 $2
var1="in function"
echo var1:$var1
}
var1="outside function"
echo var1:$var1
echo $0 $1 $2
echo "###########s1##########"
afunc funcarg1 funcarg2
echo var1:$var1
echo $0:$1 $2
执行./alice.sh arg1 arg2返回结果为:
./alice.sh arg1 arg2
###########s1##########
in function: ./alice.sh funcarg1 funcarg2
var1:in function
var1:in function
./alice.sh:arg1 arg2
看到没?在函数内定义的变量var1是全局的,因为其值在函数内被重新定义,而在外面输出其结果已经被改变为函数内定义的值。
换句话说,函数afunc将变量var1的值从“函数外”改为为“函数内”,而且这一改变对函数外已知。
而$1,$2在函数内和主脚本中有不同的取值。但是$0是不改变的哈,因为函数也在shell脚本环境内执行,$0为脚本名。
下面再来看一下函数的局部变量:
函数定义中的local语句使所涉及的变量变为函数的局剖变量。
再把书中的例子抄过来。
{
local $var1
echo in functions: $0 $1 $2
var1="in functin"
echo var1:$var1
}
var1="outside function"
echo var1:$var1
echo $0 $1 $2
echo "###########s1##########"
afunc funcarg1 funcarg2
echo var1:$var1
echo $0:$1 $2
运行./alice.sh arg1 arg2结果为:
./alice.sh arg1 arg2
###########s1##########
in function: ./alice.sh funcarg1 funcarg2
var1:in function
var1:outside function
./alice.sh:arg1 arg2
文章作者:simaopig
本文地址:http://www.xiaoxiaozi.com/2009/05/12/475/
版权所有 © 转载时必须以链接形式注明作者和原始出处!


您好,非常高兴来你站,想问下你的站的日历是怎么实现的,很不错,我也想要哦。
[回复]
simaopig 回复:
五月 13th, 2009 at 9:31 上午
呃,我用的是一款名字叫“AJAX Calendar”的插件。
官网地址为:AJAX Calendar
希望你能喜欢。
[回复]
wp不是自带日历的wiget吗?
[回复]
simaopig 回复:
五月 13th, 2009 at 1:22 下午
是有一个自带的。不过感觉不是很喜欢。呵
[回复]
@simaopig
新主题里有自带这个,你可以看看小工具.
[回复]
@LAONB
是吗?我去看看先。另外我的字真的变粗体了哈。看看先。
[回复]
@simaopig
晕啊,自己添加的一个标签,闭合处的“小于号”被弄成“全角”了。。郁闷。。
[回复]