如何在(g)awk中使用eval语句?
由于awk似乎没有回调,因此我计划对此使用eval语句。我看了GNU用户指南 然后写了这个简单的脚本如何在(g)awk中使用eval语句?,awk,Awk,由于awk似乎没有回调,因此我计划对此使用eval语句。我看了GNU用户指南 然后写了这个简单的脚本 BEGIN { args[1]="\"a\"" args[2]="\"b\"" args[3]="\"c\"" args[4]="\"\"" run_callback("printargs",args) print args[4] } function run_callback(callback,args) { nargs=length(
BEGIN {
args[1]="\"a\""
args[2]="\"b\""
args[3]="\"c\""
args[4]="\"\""
run_callback("printargs",args)
print args[4]
}
function run_callback(callback,args)
{
nargs=length(args)
if (nargs>0)
{
argstring=args[1]
for (argn=2;argn<=nargs;argn++)
{
argstring=argstring","args[argn]
}
}
callbackstr = callback"("argstring")"
print callbackstr
eval callbackstr
}
function printargs(arg1,arg2,arg3,res)
{
res=arg1","arg2","arg3
print "res="res
}
而不是预期的
[~]-> gawk -f callback.awk
printargs(a,b,c,"")
res=a,b,c
"Not sure what is supposed to be here, but it is not relevant."
在eval语句中,感觉好像什么都没有发生。有人知道这里发生了什么吗
gawk版本是4.1.3
溴
Patrikawk没有任何
eval
关键字
这可以通过gawk--dump variables
选项进行检查
gawk --dump-variables -f callback.awk
它输出文件awkvars.out
,您可以在其中找到:
eval: uninitialized scalar
awk没有任何
eval
关键字
这可以通过gawk--dump variables
选项进行检查
gawk --dump-variables -f callback.awk
它输出文件awkvars.out
,您可以在其中找到:
eval: uninitialized scalar
这在gawk调试器的文档中。这不是一个正常的呆呆的功能 然而,gawk确实支持调用一个名为
@var(args,…)
符号()的字符串中的函数:
运行时间将打印出来
res=a,b,c
""
请注意,args[4]
并没有从此修改。发件人:
相反,传递约定是在调用函数时根据以下规则在运行时确定的:如果参数是数组变量,则通过引用传递。否则,参数将按值传递
如果您直接传递了参数,并在回调中修改了参数的元素,您将看到反映出来的更改。这在gawk调试器的文档中。这不是一个正常的呆呆的功能 然而,gawk确实支持调用一个名为
@var(args,…)
符号()的字符串中的函数:
运行时间将打印出来
res=a,b,c
""
请注意,args[4]
并没有从此修改。发件人:
相反,传递约定是在调用函数时根据以下规则在运行时确定的:如果参数是数组变量,则通过引用传递。否则,参数将按值传递
如果您直接传递了参数,并在回调中修改了参数的元素,您将看到所反映的更改。
++
Nice!我不知道gawk有这么大的才能!我不知道这是可能的。这也是一个比eval更好的解决方案。++
很好!我不知道gawk有这么大的才能!我不知道这是可能的。这也是一个比eval更好的解决方案。文档中讨论的是eval awk'..
,而不是eval
内部awk
,足以断定eval
是一个由shell提供并在awk
内部支持的内置组件。文档中谈到eval awk'.
而不是eval
内部awk
,足以断定eval
是一个由shell提供并在awk
内部支持的内置组件