我正在寻找一种通过名称调用awk
函数的方法,即使用用户输入的字符串。
我的目标是替换像这样的很多代码......
if (text == "a") a(x)
if (text == "b") b(x)
if (text == "c") c(x)
...通过使用类似这样的字符串名称以任何方式分派给函数:
send(text, x)
在其他语言中,这种效果有时被描述为反射,消息发送或动态调度,或者按名称获取函数指针。
我正在寻找使用gawk
执行此操作的方法,理想情况下还使用POSIX portable awk
。
答案 0 :(得分:8)
将GNU awk 4.0或更高版本用于Indirect Function Calls:
$ 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
答案 1 :(得分:2)
#!/usr/bin/awk -f
func alpha() {
print "bravo"
}
BEGIN {
charlie = "alpha"
@charlie()
}
输出:
bravo