在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
为 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
我正在寻找一种通过名称调用 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
为 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