没有取消设置/删除变量的操作。变量再次变为未设置的唯一时间是在函数调用结束时,当它是一个未使用的函数参数被用作局部变量时:
$ 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 作为局部变量将 A 和/或 B 封装在函数中。
请注意,默认值是零或空,而不是零或假,因为它的类型是“数字字符串”。
您通过将未设置的变量与 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 不能用它做什么?