数组长度在awk函数体中失败

时间:2017-06-13 19:25:47

标签: awk

我无法访问其他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

的启发

1 个答案:

答案 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