试图强制数组中的条目成为数组

Trying to force an entry in an array to be an array

我正在尝试在 gawk 中创建一个关联数组的关联数组,我最初尝试的是:

options[key][subkey] = 1

然而,当它到达这一行时,我毫不客气地收到错误 fatal: attempt to use scalar 'option["Declaration"]' as an array("Declaration" 是我的程序使用的主要键之一,尽管我认为确切的值是无关紧要的。在程序的这个特定点,没有分配 "Declaration" 条目,尽管有些条目将 "Declaration" 作为其他条目的子键,这可能是有意义的)。

因此,通过一些谷歌搜索,我发现另一个 Whosebug question 看起来可以解决我的问题,所以我将以下代码放在它上面:

if (typeof(options[key])!="array") {
    options[key] = 0;
    delete options[key];
    split("",options[key]);
}

但是,这也不起作用,而是现在给我错误:fatal: split: second argument is not an array

我做错了什么?

编辑:请注意,我不能在这里使用基本的二维数组......对于我正在做的事情,重要的是我将一个关联数组用于另一个数组,因为我需要能够稍后识别在给定键上使用的子键。

根据下面的要求,我发布了使用关联数组的相关函数,这可能有助于澄清发生了什么。

function add_concrete(key, concrete) {
    if (key == concrete) {
        return;
    }
    if (length(options[key])>0) {
        for(i in options[key]) {
            add_concrete(i, concrete);
        }
    }
    contains[key][concrete] = 1
}

function add_options(name, value) {
    subkey = trim(name);
    if (subkey == "") {
        return;
    }
    if (match(value, ";") > 0) {
        exporting = 0;
    }
    split(value, args, /[ |;]*/);
    for (i in args) {
        key = trim(args[i]);
        if (key != "") {
            print("Adding " name " to " key);
            options[key][subkey] = 1
            if (concrete[key]) {
                add_concrete(subkey, key);
            }
        }
    }
}

抱歉,同时做饭。因为你 post 不多,所以没有太多工作要做,但没有 "initialization":

$ awk 'BEGIN {
    options[key] = 0;
    delete options[key];
#    options[key][1]          # cant see me
    split("",options[key]);
}'
awk: cmd. line:5: fatal: split: second argument is not an array

但是 "initialization":

$ awk 'BEGIN {
    options[key] = 0;
    delete options[key];
    options[key][1]          # can see me
    split("",options[key]);
}'
$_ # see this cursor happily blinking without any error