在Awk中,如何使用字符串名称调用函数?

In Awk, how to call a function by using a string name?

我正在寻找一种通过名称调用 awk 函数的方法,即使用用户输入的字符串。

我的目标是替换很多这样的代码...

if (text == "a") a(x)
if (text == "b") b(x)
if (text == "c") c(x)

...通过使用类似这样的字符串名称以任何方式分派给函数:

send(text, x)

在其他语言中,这种效果有时被描述为反射,或者消息发送,或者动态调度,或者通过名称获取函数指针。

我正在寻找一种方法来使用 gawk 并且理想情况下还使用 POSIX 便携式 awk.

#!/usr/bin/awk -f
func alpha() {
  print "bravo"
}
BEGIN {
  charlie = "alpha"
  @charlie()
}

输出:

bravo

GNU awk - Git Repositories

Indirect Function Calls 使用 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