首页 > linux > bash shell函数内的位置参数,全局与局部变量
2009五月12

bash shell函数内的位置参数,全局与局部变量

话说,shell函数里既可以使用位置参数和特殊变量(昨天说的那些,$1,$2,$3。。。以及$*,$#,$@之类)。

其方式呢,与shell脚本一样。例如,定义如下内容的alice函数

function alice
{
 echo "alice $*"
 echo "$0: $1 $2 $3 $4"
 echo "$# arguments"
}


呵呵,是不是和昨天的那个定义一样?废话,要是不一样的话咋体现出统一啊?呵呵。

鍵入alice in wonderland与昨天的结果一致:

alice in wonderland
/bin/bash: in wonderland
2 arguments

典型情况下,在一个sehll脚本里都要定义几个shell函数。

因此,每个函数都需要处理自己的参数,这表明每个函数都有这些变量的副本(即使函数并不像脚本运行 在其子shell里)

,我们称这些变量对函数是局部的(指这些位置参数与特殊变量)

在函数内定义的其他变量则不是局部的,(为全局变量):

我们可以定义一个脚本,内容如下:

  #!/bin/bash
  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返回结果为:

var1:outside function
./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语句使所涉及的变量变为函数的局剖变量。

再把书中的例子抄过来。

 function alice
 {
   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结果为:

var1:outside function
./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/
版权所有 © 转载时必须以链接形式注明作者和原始出处!

7 Responses to “bash shell函数内的位置参数,全局与局部变量”

  1. #1 scofeld 回复 | 引用 Post:2009-05-13 00:26

    您好,非常高兴来你站,想问下你的站的日历是怎么实现的,很不错,我也想要哦。

    [回复]

    simaopig 回复:

    呃,我用的是一款名字叫“AJAX Calendar”的插件。

    官网地址为:AJAX Calendar

    希望你能喜欢。

    [回复]

  2. #2 bolo 回复 | 引用 Post:2009-05-13 12:59

    wp不是自带日历的wiget吗?

    [回复]

    simaopig 回复:

    是有一个自带的。不过感觉不是很喜欢。呵

    [回复]

  3. #3 LAONB 回复 | 引用 Post:2009-05-13 17:16

    @simaopig
    新主题里有自带这个,你可以看看小工具.

    [回复]

  4. #4 simaopig 回复 | 引用 Post:2009-05-13 17:18

    @LAONB
    是吗?我去看看先。另外我的字真的变粗体了哈。看看先。

    [回复]

  5. #5 simaopig 回复 | 引用 Post:2009-05-13 17:22

    @simaopig
    晕啊,自己添加的一个标签,闭合处的“小于号”被弄成“全角”了。。郁闷。。

    [回复]

发表评论

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)