Is there a way to force (g/n)awk so that variables must be declared/initialized before used?
(Like option explicit in vb).
Thank you in advance.
One mechanism to detect these kinds of mistakes is the "lint" support in the GNU implementation of Awk (Gawk).
Basic example:
$ gawk --lint 'BEGIN { a }'
gawk: warning: statement has no effect
gawk: warning: reference to uninitialized variable `a'
Note that Gawk actually "compiles" the code in a single pass and knows about all the variables. It instantiates them before execution has begun. So that is to say, all the variables are in fact declared by their appearance in the program. That doesn't cause them to be initialized, though.
An Awk implementation could work dynamically, by instantiating a variable when it is encountered for the first time during execution, but Gawk doesn't work that way.
We can see the variables that Gawk knows about by getting a dump, which goes into a file called awkvars.out:
$ gawk --dump-variables 'function foo() { return x }'
$ grep x awkvars.out
x: untyped variable
See: without the function foo having been executed, x is known and listed as a variable.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With