bash – awk是否支持动态的用户定义变量?
发布时间:2020-12-15 22:18:27 所属栏目:安全 来源:网络整理
导读:awk支持这个: awk '{print $(NF-1);}' 但不适用于用户定义的变量: awk '{a=123; b="a"; print $($b);}' 顺便说一下,shell支持这个: a=123;b="a";eval echo ${$b}; 如何在awk中实现我的目的? 解决方法 现在不行.但是,如果你提供一个包装器,它可能(有点ha
awk支持这个:
awk '{print $(NF-1);}' 但不适用于用户定义的变量: awk '{a=123; b="a"; print $($b);}' 顺便说一下,shell支持这个: a=123; b="a"; eval echo ${$b}; 如何在awk中实现我的目的? 解决方法
现在不行.但是,如果你提供一个包装器,它可能(有点hacky和脏).
这个想法是使用最近版本的gawk中引入的@ operator. 这个@运算符通常用于按名称调用函数. function foo(s){print "Called foo "s} function bar(s){print "Called bar "s} { var = ""; if(today_i_feel_like_calling_foo){ var = "foo"; }else{ var = "bar"; } @var( "arg" ); # This calls function foo(),or function bar() with "arg" } 现在,这对它自己很有用. function get(varname,this,call){call="get_"varname;return @call();} function set(varname,arg,call){call="set_"varname; @call(arg);} 所以现在,对于每个要通过名称进行访问的var名称,您可以声明这两个函数 function get_my_var(){return my_var;} function set_my_var(arg){my_var = arg;} 而且,在你的BEGIN {}街区的某个地方, BEGIN{ my_var = ""; } 声明它以进行全局访问. get("my_var"); set("my_var","whatever"); 这可能一开始看起来没用,但是有很好的用例,例如 您也可以编写以awk方式引用var名称的配置脚本, 然而,这不是最好的做事方式,它完成了工作,我不必担心空指针异常,或GC等:-) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |