• 传世开服网
  • 首页
  • 新开传世游戏
  • 最新传奇世界
  • 传奇世界页游
  • 网页变态传世
default blue green orange red
主页 > 网页变态传世 > > 正文

高级Bash脚本编程指南

  • 怎样使一个变量变成"局部"变量?

    局部变量

    如果变量用local来声明, 那么它就只能够在该变量被声明的代码块中可见. 这个代码块就是局部"范围". 在一个函数中, 一个局部变量只有在函数代码块中才有意义.

    例子 23-12. 局部变量的可见范围

    1 #!/bin/bash 2 # 函数内部的局部变量与全局变量. 3  4 func () 5 { 6  local loc_var=23 # 声明为局部变量. 7  echo # 使用'local'内建命令. 8  echo "\"loc_var\" in function = $loc_var" 9  global_var=999 # 没有声明为局部变量. 10  # 默认为全局变量. 11  echo "\"global_var\" in function = $global_var" 12 } 13  14 func 15  16 # 现在, 来看看局部变量"loc_var"在函数外部是否可见. 17  18 echo 19 echo "\"loc_var\" outside function = $loc_var" 20  # $loc_var outside function = 21  # 不行, $loc_var不是全局可见的. 22 echo "\"global_var\" outside function = $global_var" 23  # 在函数外部$global_var = 999 24  # $global_var是全局可见的. 25 echo 26  27 exit 0 28 # 与C语言相比, 在函数内声明的Bash变量 29 #+ 除非它被明确声明为local时, 它才是局部的.

    Caution

    在函数被调用之前, 所有在函数中声明的变量, 在函数体外都是不可见的, 当然也包括那些被明确声明为local的变量. 1 #!/bin/bash 2  3 func () 4 { 5 global_var=37 # 在函数被调用之前, 6  #+ 变量只在函数体内可见. 7 } # 函数结束 8  9 echo "global_var = $global_var" # global_var = 10  # 函数"func"还没被调用, 11  #+ 所以$global_var还不能被访问. 12  13 func 14 echo "global_var = $global_var" # global_var = 37 15  # 已经在函数调用的时候设置了变量的值.

    23.2.1. 局部变量使递归变为可能.

    局部变量允许递归, [1] 但是这种方法会产生大量的计算, 因此在shell脚本中, 非常明确的不推荐这种做法. [2]

    例子 23-13. 使用局部变量的递归

    1 #!/bin/bash 2  3 # 阶乘 4 # ---- 5  6  7 # bash允许递归吗? 8 # 嗯, 允许, 但是... 9 # 他太慢了, 所以恐怕你难以忍受. 10  11  12 MAX_ARG=5 13 E_WRONG_ARGS=65 14 E_RANGE_ERR=66 15  16  17 if [ -z "$1" ] 18 then 19  echo "Usage: `basename $0` number" 20  exit $E_WRONG_ARGS 21 fi 22  23 if [ "$1" -gt $MAX_ARG ] 24 then 25  echo "Out of range (5 is maximum)." 26  # 现在让我们来了解一些实际情况. 27  # 如果你想计算比这个更大的范围的阶乘, 28  #+ 应该用真正的编程语言来重写它. 29  exit $E_RANGE_ERR 30 fi 31  32 fact () 33 { 34  local number=$1 35  # 变量"number"必须声明为局部变量, 36  #+ 否则不能正常工作. 37  if [ "$number" -eq 0 ] 38  then 39  factorial=1 # 0的阶乘为1. 40  else 41  let "decrnum = number - 1" 42  fact $decrnum # 递归的函数调用(就是函数调用自己). 43  let "factorial = $number * $?" 44  fi 45  46  return $factorial 47 } 48  49 fact $1 50 echo "Factorial of $1 is $?." 51  52 exit 0

    也可以参考例子 A-16, 这是一个脚本中递归的例子. 必须认识到递归同时也意味着巨大的资源消耗和缓慢的运行速度, 因此它并不适合在脚本中使用.

    ,

相关文章

  • 搜狗输入法
  • 暴雪副总:家用机版《暗黑3》理论
  • 《魔剑英雄》首测参与者募集开始
  • 画中人画谁影 新倩女幽魂国民老
  • 腾讯UP手游情报:众多经典IP 剑网
  • 《星球大战OL》PAX出展计划 提供
  • 【视频】墨西哥摔角手被击身亡
  • WWE巨星神秘人雷尔探班曼超变态
  • 【活动】《风暴英雄》夏日皮肤上
  • 揭秘血腥的超变传奇世界页游:选
  • Copyright © 传世开服网 版权所有