0

我尝试在 gawk 中寻找特定类型的数组订阅的解释:

arr[tog = ! tog, 0] = i

但我似乎找不到合适的搜索词放入谷歌。我得到那行的完整代码可以在这里找到:http: //lawker.googlecode.com/svn/fridge/lib/awk/levenshtein.awk

谁能告诉我那是做什么的?它是否为其逆分配了一个布尔标志并将分配tog的结果用作数组索引?

4

1 回答 1

1

括号中的内容是在算术上下文中评估的(不知道在哪里记录),所以这会反转变量 tog 的布尔值,然后a[0]="i"不管 tog 的值如何设置:

$ tog=0
$ arr[tog = ! tog, 0]=i
$ echo $tog; echo "${!arr[@]}"
1
0
$ arr[tog = ! tog, 0]=i
$ echo $tog; echo "${!arr[@]}"
0
0

因此,仅存在数组索引 0。

哇,那是完全错误的。我没有看到这是一个愚蠢的问题。

gawk 实际上不能有多维数组,但它可以用逗号分隔的键来伪造它们。逗号分隔的元素使用 SUBSEP 变量连接成一个字符串:

gawk '
    function do_toggle(i) { 
        arr[tog = ! tog, 0] = i 
        print "after toggling:"
        print tog
        for (idx in arr) print "arr["idx"]="arr[idx]
    }
    BEGIN {
        SUBSEP=":"
        tog=0
        do_toggle(5)
        do_toggle(10)
    }
'
after toggling:
1
arr[1:0]=5
after toggling:
0
arr[1:0]=5
arr[0:0]=10
于 2013-06-27T11:45:43.607 回答