我想知道是否可以删除变量awk.对于数组,您可以说delete a[2]并删除2数组的索引a[].但是,对于变量我找不到方法.
我得到的最接近的是说var=""或var=0.
但是,似乎不存在的变量的默认值是0或False:
$ awk 'BEGIN {if (b==0) print 5}'
5
$ awk 'BEGIN {if (!b) print 5}' 
5
所以我也想知道是否有可能区分设置0的变量和尚未设置的变量,因为它似乎不是:
$ awk 'BEGIN {a=0; if (a==b) print 5}'
5
没有取消/删除变量的操作.变量再次取消设置的唯一时间是在函数调用结束时,它是一个未使用的函数参数,用作局部变量:
$ cat tst.awk
function foo( arg ) {
    if ( (arg=="") && (arg==0) ) {
        print "arg is not set"
    }
    else {
        printf "before assignment: arg=<%s>\n",arg
    }
    arg = rand()
    printf "after assignment: arg=<%s>\n",arg
    print "----"
}
BEGIN {
    foo()
    foo()
}
$ awk -f tst.awk file
arg is not set
after assignment: arg=<0.237788>
----
arg is not set
after assignment: arg=<0.291066>
----
因此,如果要执行某些操作A然后取消设置变量X然后执行操作B,则可以使用X作为本地var将A和/或B封装在函数中.
请注意,默认值为零或null,不为零或false,因为其类型为"数字字符串".
您可以通过将其与null和零进行比较来测试未设置的变量:
$ awk 'BEGIN{ if ((x=="") && (x==0)) print "y" }'
y
$ awk 'BEGIN{ x=0; if ((x=="") && (x==0)) print "y" }'
$ awk 'BEGIN{ x=""; if ((x=="") && (x==0)) print "y" }'
如果你需要删除一个变量,那么你总是可以使用单元素数组:
$ awk 'BEGIN{ if ((x[1]=="") && (x[1]==0)) print "y" }'
y
$ awk 'BEGIN{ x[1]=""; if ((x[1]=="") && (x[1]==0)) print "y" }'
$ awk 'BEGIN{ x[1]=""; delete x; if ((x[1]=="") && (x[1]==0)) print "y" }'
y
但恕我直言,混淆你的代码.
取消设置变量的用例是什么?你用它做什么,var=""或者你不能做var=0什么?