作者:zhanhailiang 日期:2012-12-15
首先需要知道,在函数体中定义的变量默认是全司变量。如下示例,函数insert()中定义的临时变量a,b在函数外是可见的。
bill@net:~/code$ cat func.sh #!/bin/sh awk ' function insert(str, pos, inc) { b = substr(str, 1, pos); a = substr(str, pos+1); return b inc a; } { print insert($1, 4, "XXXX"); print b; print a; }' $* bill@net:~/code$ echo baidu.com|./func.sh baidXXXXu.com baid u.com
欲使局部变量不可见,可以通过在参数列表中定义这些变量来声明变量为函数的局部变量。局部的临时变量在参数列表的末尾。如下代码修改:
bill@net:~/code$ cat func.sh #!/bin/sh awk ' function insert(str, pos, inc, b, a) { b = substr(str, 1, pos); a = substr(str, pos+1); return b inc a; } { print insert($1, 4, "XXXX"); print b; print a; }' $* bill@net:~/code$ echo baidu.com|./func.sh baidXXXXu.com