Arrays in nawk test for existance and implicit creation of elements
Arrays in nawk test for existance and implicit creation of elements When using arrays in nawk I still stumble upon handling the test for existance wrongly. Consider this example: nawk '{for(i in u) print "1",i,u[i]; if(u["ab"]!="") print "ab exists"; for(i in u) print "2",i,u[i]}' This script should print all entries in array u then do a check if u["ab"] is non-empty and again print all entries in array u . Since there is no obvious assignment to u[] the assumption is that neither of the loops will print anything so it is somewhat unexpected that the first line of input will trigger a line of output: 2 ab i.e. the second loop finds an array element ab . Why? Because the test u["ab"]!="" implicitly created the array entry u["ab"] with an empty content. The correct way to test for existance which does not create an entry implicitly is like this: nawk '{for(i in u) print ...