使用 GNU awk
5.3.1,如果命令行中没有为变量指定默认值,我想为它分配一个默认值。该值可以是任何值,包括 0。我以为我可以使用,SYMTAB
但由于SYMTAB
在解析期间和执行之前构建,它不起作用:
$ awk -v v=1 'BEGIN { if(!("v" in SYMTAB)) v = 42; print "v = " v }' /dev/null
v = 1
$ awk 'BEGIN { if(!("v" in SYMTAB)) v = 42; print "v = " v }' /dev/null
v =
还有其他方法吗?
我将
typeof
按照以下方式利用该功能完成此任务给出输出
(在 GNU Awk 5.3.1 中测试)
在任何 awk 中确定变量是否设置的方法是将其与两者进行比较
0
,并且null
由于任何标量变量的初始值都是0-or-null
,因此不需要特定于 gawk 的SYMTAB[]
查找(您已经发现您不能使用它,因为变量v
将存在于中,SYMTAB[]
因为它在您的代码中提到过)或typeof()
调用。例如:FWIW 这也是你判断函数的可选参数是否被传入的方法。
typeof(v) == "untyped"
顺便说一句,除了可移植性之外,上述方法与其他地方建议的使用 gawk 之间存在功能差异:如果您要使用
typeof()
它,那么您需要检查它的输出是否untyped
是unassigned
:有关更多信息,请参阅 gawk 手册页 :-)。