来自 gawk 手册
由于某些内置函数(例如
match
、split
、sub
)接受 regexp 常量作为参数,因此在尝试使用 regexp 常量作为用户定义函数的参数时可能会出现混乱。例如:function mysub(pat, repl, str, global) { if (global) gsub(pat, repl, str) else sub(pat, repl, str) return str } { ... text = "hi! hi yourself!" mysub(/hi/, "howdy", text, 1) ... }
在此示例中,程序员希望将正则表达式常量传递给用户定义的函数
mysub()
,该函数又将其传递给sub()
或gsub()
。然而,真正发生的情况是pat
,根据是否$0
匹配,为该参数分配一个值 1 或零/hi/
。当 gawk 看到正则表达式常量用作用户定义函数的参数时,它会发出警告,因为以这种方式传递真值可能不是预期的。
如何将正则表达式常量作为参数传递给函数,以便该函数可以将参数作为正则表达式而不是真值接收?
换句话说,在将正则表达式常量传递给函数之前,如何防止将其计算为字符串匹配表达式,并确保将其按原样处理?
- 如何将正则表达式常量作为正则表达式传递给那些内置函数(例如
match
,split
,sub
),而不将其计算为字符串匹配表达式?
谢谢。
答案1
您应该使用引号将值传递给函数变量。
mysub( "hi", "howdy", text, 1)
或者为变量使用其他名称:
thisarg = "hi"
mysub( thisarg, "howdy", text, 1)