我有一个像这样的数组......
a["a"] = "aa"
a["b"] = "ab"
a["c"] = "ac"
a["d"]["a"] = "ada"
a["d"]["b"]["a"] = "adba"
a["e"]["a"]["a"]["a"] = "aeaaa"
...并且想要克隆它
clone(b, a)
这是我到目前为止所尝试的:
function clone(lhs, rhs){
for (i in rhs) {
if (typeof(arr[i]) == "array"){
clone(lhs[i], rhs[i])
} else {
lhs[i] = rhs[i]
}
}
}
但这显然不起作用,因为在分配给b["d"]
之前尚未创建。第二个问题是应该输入为.a["d"]["a"]
b["d"]["a"]
b["d"]
array
答案1
您需要在克隆子数组之前对其进行初始化:
function clone(lhs, rhs) {
for (i in rhs) {
if (isarray(rhs[i])) {
lhs[i][1] = ""
delete lhs[i][1]
clone(lhs[i], rhs[i])
} else {
lhs[i] = rhs[i]
}
}
}
手册页中提到了写入值然后删除它的技巧gawk
。
(我还使用 修复了数组检测isarray
。)