重击初始化动态关联数组

时间:2018-11-07 22:52:20

标签: arrays bash initialization associative-array

我有一个bash代码来声明一个关联数组。初始化之后,一些变量被添加到数组中。到这里为止,一切工作正常。如果程序再次达到相同的功能,则会出现问题。数组的声明再次完成,我想要的是数组的数据被销毁了,但看来clarify语句并未销毁数据。

此PoC代码显示了我的意思。

#!/bin/bash

declare -gA myarray

myarray["testing"]="anyvalue"

for i in "${myarray[@]}"; do
    echo "${i}" # It prints "anyvalue", until here is ok
done

declare -gA myarray # At this point I want the array empty again!

for i in "${myarray [@]}"; do
    echo "${i}" # This is printing "anyvalue"!! and It should print nothing
done

echo "finished"

此脚本的输出为:

anyvalue
anyvalue
finished

所需的输出是:

anyvalue
finished

我发现了类似的post。这篇文章的问题是,似乎需要知道数组的固定长度。在我的情况下(实际情况,不是PoC代码),数组可以获取动态值和元素,我不知道它是否将具有一个值,三个或二十个值。

如何在不知道内部有多少数据的情况下初始化破坏其数据的数组?谢谢。

1 个答案:

答案 0 :(得分:1)

使用bash内置的unset

$ declare -gA myarray
$ myarray["foo"]=bar
$ echo ${myarray[@]}
bar
$ unset myarray
$ echo ${myarray[@]}

$ myarray["bar"]=foo
$ echo ${myarray[@]}
foo