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
|