我尝试在 gawk 中寻找特定类型的数组订阅的解释:
arr[tog = ! tog, 0] = i
但我似乎找不到合适的搜索词放入谷歌。我得到那行的完整代码可以在这里找到:http: //lawker.googlecode.com/svn/fridge/lib/awk/levenshtein.awk
谁能告诉我那是做什么的?它是否为其逆分配了一个布尔标志并将分配tog
的结果用作数组索引?
我尝试在 gawk 中寻找特定类型的数组订阅的解释:
arr[tog = ! tog, 0] = i
但我似乎找不到合适的搜索词放入谷歌。我得到那行的完整代码可以在这里找到:http: //lawker.googlecode.com/svn/fridge/lib/awk/levenshtein.awk
谁能告诉我那是做什么的?它是否为其逆分配了一个布尔标志并将分配tog
的结果用作数组索引?
括号中的内容是在算术上下文中评估的(不知道在哪里记录),所以这会反转变量 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