有没有AWK语法检查器?
发布时间:2020-12-14 01:59:09 所属栏目:Linux 来源:网络整理
导读:有没有AWK语法检查器?我对只有标记语法错误的最小检查器和沿着lint行的更广泛的检查器感兴趣. 它应该只是一个静态检查器,不依赖于运行脚本. 解决方法 如果您使用BEGIN {exit(0)} END {exit(0)}为Awk脚本添加前缀,则可以保证您的所有代码都不会运行.在BEGIN
有没有AWK语法检查器?我对只有标记语法错误的最小检查器和沿着lint行的更广泛的检查器感兴趣.
它应该只是一个静态检查器,不依赖于运行脚本. 解决方法
如果您使用BEGIN {exit(0)} END {exit(0)}为Awk脚本添加前缀,则可以保证您的所有代码都不会运行.在BEGIN和END期间退出可防止其他开始和退出块运行.如果Awk返回0,那么你的脚本很好;否则出现语法错误.
如果将代码段放在单独的参数中,您将在错误消息中获得良好的行号.这个调用…… gawk --source 'BEGIN { exit(0) } END { exit(0) }' --file syntax-test.awk 给出如下错误消息: gawk: syntax-test.awk:3: x = f( gawk: syntax-test.awk:3: ^ unexpected newline or end of string GNU Awk的–lint可以发现全局变量和未定义函数之类的东西: gawk: syntax-test.awk:5: warning: function `g': parameter `x' shadows global variable gawk: warning: function `f' called but never defined 而GNU Awk的–posix选项可以发现一些兼容性问题: gawk: syntax-test.awk:2: error: `delete array' is a gawk extension 更新:BEGIN和END 虽然END {exit(0)}块似乎是多余的,但比较这三个调用之间的细微差别: $echo | awk ' BEGIN { print("at begin") } /.*/ { print("found match") } END { print("at end") }' at begin found match at end $echo | awk ' BEGIN { exit(0) } BEGIN { print("at begin") } /.*/ { print("found match") } END { print("at end") }' at end $echo | awk ' BEGIN { exit(0) } END { exit(0) } BEGIN { print("at begin") } /.*/ { print("found match") } END { print("at end") }' 在Awk中,在BEGIN期间退出将取消所有其他开始块,并将阻止匹配任何输入.在END期间退出是阻止所有其他事件块运行的唯一方法;这就是上面第三次调用显示没有执行print语句的原因. GNU Awk用户指南有一个关于 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |