【问题标题】:Bash. Initialize dynamic associative array重击。初始化动态关联数组
【发布时间】:2018-11-07 22:52:20
【问题描述】:

我有一个声明关联数组的 ba​​sh 代码。初始化后,一些变量被添加到数组中。直到这里一切正常。如果程序再次达到相同的功能,就会出现问题。数组的声明再次完成,我想要的是数组的数据被破坏,但声明语句似乎没有破坏数据。

这个 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 代码),数组可以获取动态值和元素,我不知道它是一个值,还是三个,还是二十个。

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

【问题讨论】:

    标签: arrays bash initialization associative-array


    【解决方案1】:

    使用 bash 的内置 unset

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

    【讨论】:

      猜你喜欢
      • 2016-06-13
      • 2018-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-07
      • 2011-06-02
      • 1970-01-01
      相关资源
      最近更新 更多