manpagez: man pages & more
info gawk
Home | html | info | man
[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

9.2.3.2 Controlling Variable Scope

There is no way to make a variable local to a { … } block in awk, but you can make a variable local to a function. It is good practice to do so whenever a variable is needed only in that function.

To make a variable local to a function, simply declare the variable as an argument after the actual function arguments (see section Function Definition Syntax). Look at the following example where variable i is a global variable used by both functions foo() and bar():

function bar()
{
    for (i = 0; i < 3; i++)
        print "bar's i=" i
}

function foo(j)
{
    i = j + 1
    print "foo's i=" i
    bar()
    print "foo's i=" i
}

BEGIN { 
      i = 10
      print "top's i=" i
      foo(0)
      print "top's i=" i
}

Running this script produces the following, because the i in functions foo() and bar() and at the top level refer to the same variable instance:

top's i=10
foo's i=1
bar's i=0
bar's i=1
bar's i=2
foo's i=3
top's i=3

If you want i to be local to both foo() and bar() do as follows (the extra-space before i is a coding convention to indicate that i is a local variable, not an argument):

function bar(    i)
{
    for (i = 0; i < 3; i++) 
        print "bar's i=" i
}

function foo(j,    i)
{
    i = j + 1
    print "foo's i=" i
    bar()
    print "foo's i=" i
}

BEGIN { 
      i = 10
      print "top's i=" i
      foo(0) 
      print "top's i=" i
}

Running the corrected script produces the following:

top's i=10
foo's i=1
bar's i=0
bar's i=1
bar's i=2
foo's i=1
top's i=10

[ << ] [ < ] [ Up ] [ > ] [ >> ]         [Top] [Contents] [Index] [ ? ]

This document was generated on March 30, 2012 using texi2html 5.0.