旧版 bash-4 中的全局关联数组(哈希)

问题描述 投票:0回答:1

以下脚本在使用 bash-5 的 FreeBSD 上按预期工作:

function a {
    declare -gA Seen

    if [[ -v Seen[$1] ]]
    then
        echo "Saw $1 already"
        return
    fi

    Seen[$1]=''
}

a a
a a
a b
a a
a b

产生以下输出:

Saw a already
Saw a already
Saw b already

然而,在 RHEL7 上,bash 较旧(4.2),重复的参数永远不会被识别为已经看到的 - 就好像每次调用函数时都会重新创建

Seen
数组一样。将
declare
行移到函数之外——进入全局范围——没有帮助。

也许有解决方法吗?函数在调用之间(在同一个 bash 进程内)保持其状态的某种方法?

bash global-variables associative-array
1个回答
0
投票

对于你似乎想要做的事情,我只是像我们在惯用的 awk 中所做的那样:

a() {
    declare -gA Seen

    if (( Seen[$1]++ ))
    then
        echo "Saw $1 already"
        return
    fi
}
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.