我无法访问其他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
的启发答案 0 :(得分:4)
曾几何时length()
用于查找字符串中的字符数。然后gawk修改它以查找数组中的元素数。然后POSIX采用了gawk方法,今天我们今天所有的awks都高兴地将字符串或数组作为参数传递给length()。
现在的awk版本中没有遇到任何问题,这是gawk 3.1.5和3.1.6中的一个错误,请参阅https://lists.gnu.org/archive/html/bug-gnu-utils/2008-03/msg00028.html