Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3391926
  • 博文数量: 534
  • 博客积分: 11595
  • 博客等级: 上将
  • 技术积分: 5785
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-22 17:00
文章分类

全部博文(534)

文章存档

2015年(4)

2014年(27)

2013年(15)

2012年(38)

2011年(36)

2010年(85)

2009年(63)

2008年(142)

2007年(124)

分类:

2010-11-21 11:04:58

在awk中,所有变量都是全局变量,本来是没有局部变量的概念的。这样就会造成自定义函数中的变量有可能和主程序其他部分重名,因而发生错误。

1.每个函数里面的变量都加上特定的前缀,避免变量名的重复,但是这是一个笨办法,这样会造成代码的易读性下降,同时也增加了输入的麻烦。


2.利用局部变量的办法来解决,如果函数内的变量生存周期限制在函数内部的话,这个问题就简单了。通过查看资料,得到“Awk 提供了一种蹩脚的方式来定义局部变量,那就是通过函数的参数列表”。在gawk手册里面也有如下的说明,gawk 手册中 “USER-DEFINED FUNCTIONS” 一节中找到了相似的一段话:“由于原来的 Awk 不支持函数,局部变量在 Awk 中的实现相当笨拙,通过给函数定义额外的参数来实现。按照惯例,在真实参数后面多加几个空格,以分隔真实参数与局部变量声明。”


具体实现如下:
首先定义function
function factorial(n, _ARGVEND_, i, s) #添加_ARGVEND_ 分割传递的参数和局部变量,_ARGVEND_后面的就是自定义的局部变量
接着调用时 value = factorial(i);参数表里面只有传递一个参数
按照上述的办法,在function factorial里面,变量i,s就完全是一个局部变量了,不管脚本的其他部分是否定义了重名的变量,都能够保证这个函数的调用是完全安全的。

转自:http://blog.chinaunix.net/u1/42925/showart_476395.html

阅读(1789) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-11-22 17:25:29

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com