Bash。初始化动态关联数组
Bash. Initialize dynamic associative array
我有一个 bash 代码声明了一个关联数组。初始化后,一些变量被添加到数组中。直到这里一切正常。如果程序再次达到相同的功能,就会出现问题。数组的声明再次完成,我想要的是数组的数据被销毁,但似乎声明语句没有销毁数据。
这个 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。这个post的问题是好像需要知道数组的固定长度。在我的例子中(真实的例子,不是 PoC 代码)数组可以获得动态值和元素,我不知道它是否会有一个值,或者三个,或者二十个。
如何在不知道里面有多少数据的情况下初始化数组并破坏其数据?谢谢。
使用 unset
bash
的内置函数
$ declare -gA myarray
$ myarray["foo"]=bar
$ echo ${myarray[@]}
bar
$ unset myarray
$ echo ${myarray[@]}
$ myarray["bar"]=foo
$ echo ${myarray[@]}
foo
我有一个 bash 代码声明了一个关联数组。初始化后,一些变量被添加到数组中。直到这里一切正常。如果程序再次达到相同的功能,就会出现问题。数组的声明再次完成,我想要的是数组的数据被销毁,但似乎声明语句没有销毁数据。
这个 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。这个post的问题是好像需要知道数组的固定长度。在我的例子中(真实的例子,不是 PoC 代码)数组可以获得动态值和元素,我不知道它是否会有一个值,或者三个,或者二十个。
如何在不知道里面有多少数据的情况下初始化数组并破坏其数据?谢谢。
使用 unset
bash
$ declare -gA myarray
$ myarray["foo"]=bar
$ echo ${myarray[@]}
bar
$ unset myarray
$ echo ${myarray[@]}
$ myarray["bar"]=foo
$ echo ${myarray[@]}
foo