清除关联数组的一部分

Clear part of associative array

我必须使用循环来清除关联数组中的一些数据,还是有更快更好的选择?

目前我正在使用:

until [[ $ploop1 -eq 99 ]]; do  ##do044
    ((++ploop1))
    hnr[$ploop1,2]=0
    hnr[$ploop1,3]=0
    hnr[$ploop1,4]=0
    hnr[$ploop1,5]=0
done  ##do044

请注意,不应清除 ,0 和 1

将我的评论合并到一个区域中...

OP 提到了 'clear the data' 但实际上是将数组元素设置为 0(零)。如果 OP 有要处理的数字列表,那么类似下面的内容也应该有效:

until [[ $ploop1 -eq 99 ]]; do
    ((++ploop1))
    for x in {2..5}            # or `x in 2 3 4 5` or `x in {2..4} 5` or ...
    do
        hnr[$ploop1,$x]=0
    done
done

如果 OP 不介意使用 eval 这可以缩短为:

until [[ $ploop1 -eq 99 ]]; do
    ((++ploop1))
    eval hnr[$ploop1,{2..5}]=0 
done

现在,如果 OP 想要 clear remove the elements 中的元素,那么这应该可行...

until [[ $ploop1 -eq 99 ]]; do
    ((++ploop1))
    unset hnr[$ploop1,{2..5}]
done

...并且只要 unset 是针对数组元素发出的并且 不是 数组(即 unset hnr),那么数组声明仍然是 intact/valid,即不需要重新 declare -A 数组。


添加 Philippe 的 question/comment:

如果 OPs 循环的全部目的是 只是 取消设置数组元素,那么下面应该消除循环的需要:

unset hnr[{0..99},{2..5}]

注意:OP可以根据实际使用范围调整数字...