【发布时间】:2016-03-28 14:39:11
【问题描述】:
我正在使用 PROCINFO 及其 sorted_in 索引,以便能够control the array transversal。
然后我想知道PROCINFO的内容是什么,所以我决定浏览一下并打印它的值:
$ awk 'BEGIN {for (i in PROCINFO) print i, PROCINFO[i]}'
ppid 7571
pgrpid 14581
api_major 1
api_minor 1
group1 545
gid 545
group2 1000
egid 545
group3 10004
awk: cmd. line:1: fatal: attempt to use array `PROCINFO["identifiers"]' in a scalar context
如您所见,它中断是因为 - 至少 - 一个项目本身也是一个数组。
快速的解决方法是跳过这个:
awk 'BEGIN {for (i in PROCINFO) {if (i!="identifiers") {print i, PROCINFO[i]}}}'
但它看起来有点 hacky,想要有类似的东西
awk 'BEGIN {for (i in PROCINFO) {if (!(a[i] is array)) {print i, PROCINFO[i]}}}'
^^^^^^^^^^^^^^^^
由于没有类似type() 函数来确定变量是数组还是标量,我想知道:有没有办法检查元素是否是数组?
我正在考虑使用for 来处理它并发现可能的错误,但我不知道如何。
$ awk 'BEGIN{a[1]=1; for (i in a) print i}'
1
$ awk 'BEGIN{a=1; for (i in a) print i}'
awk: cmd. line:1: fatal: attempt to use scalar `a' as an array
$ awk 'BEGIN{a[1]=1; print a}'
awk: cmd. line:1: fatal: attempt to use array `a' in a scalar context
【问题讨论】:
标签: arrays variables awk gawk variable-types