【发布时间】:2017-06-14 03:49:51
【问题描述】:
我无权访问其他 awk 版本来检查此问题的一般性。
$ awk --version
GNU Awk 3.1.5
考虑这个简单的测试
$ awk 'function f(x) {x[1]} BEGIN{f(x); print length(x)}'
1
按预期工作,但是在函数体中打印长度失败
$ awk 'function f(x) {x[1]; print length(x)} BEGIN{f(x)}'
awk: fatal: attempt to use array `x (from x)' in a scalar context
在函数体中获取数组长度的唯一方法似乎是计算元素for(i in x) c++
这是受到answer的启发
【问题讨论】:
-
我对 awk 一点也不熟悉,但 this 可能会有所启发
-
我在 4.1.1,后者打印 1。
-
有趣的是这个bug只出现在函数上下文中!
-
@Wondercricket 链接的答案是this comment:length(array) 是(3.1.5 中的新功能),但不在 POSIX 模式下
-
是的,很好的信息。但是,它在主语句上下文中有效。似乎函数上下文对于长度调用有不同的代码路径。这让我很惊讶……
标签: awk