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

joe*_*son 4 awk gawk

我正在寻找一种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.

Ed *_*ton 8

使用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)

  • 是的,等待5年POSIX赶上gawk :-).不,对不起,在POSIX中没有好办法. (4认同)