我正在寻找一种awk通过名称调用函数的方法,即使用用户输入的字符串.
我的目标是替换这样的很多代码......
if (text == "a") a(x)
if (text == "b") b(x)
if (text == "c") c(x)
Run Code Online (Sandbox Code Playgroud)
...通过使用类似这样的字符串名称以任何方式分派给函数:
send(text, x)
Run Code Online (Sandbox Code Playgroud)
在其他语言中,这种效果有时被描述为反射,消息发送或动态分派,或者按名称获取函数指针.
我正在寻找一种方法来实现这一点gawk,理想情况下也使用POSIX portable awk.
使用GNU awk 4.0或更高版本进行间接函数调用:
$ cat tst.awk
function foo() { print "foo() called" }
function bar() { print "bar() called" }
BEGIN {
var = "foo"
@var()
var = "bar"
@var()
}
$ awk -f tst.awk
foo() called
bar() called
Run Code Online (Sandbox Code Playgroud)