【sed&awk】awk中变量作用域的认识

  作者: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

你可能感兴趣的:(sed)