全部博文(293)
分类:
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就完全是一个局部变量了,不管脚本的其他部分是否定义了重名的变量,都能够保证这个函数的调用是完全安全的。
chinaunix网友2010-11-22 17:25:29
很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com