bash - 清除关联数组的一部分
问题描述
我必须使用循环来清除关联数组中的一些数据,还是有更快更好的选择?
目前我正在使用:
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 提到了“清除数据”,但实际上将数组元素设置为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
)发出 ,那么数组声明保持不变/有效,即无需重新declare -A
数组。
添加菲利普的问题/评论:
如果 OPs 循环的全部目的只是取消设置数组元素,那么以下应该消除对循环的需要:
unset hnr[{0..99},{2..5}]
注意:OP 可以根据实际使用范围调整数字...
推荐阅读
- java - YouTube 视频在 WebView Android 中仅在屏幕旋转时播放音频
- mongodb - 检查字段退出,使用 go mongodb 比较 int 值
- php - php查找列名
- ios - UIAlertController is not showing
- .net - “访问被拒绝”或承诺
从 WebView2 页面访问 COM 对象时出现的错误 - excel - 在 VBA 中检查公式错误时类型不匹配
- html - 如何在 Flazio 网站上验证 Google Search Console 帐户?
- netbeans - Netbeans doesn't see newly installed fonts
- r - How to use a highcharter event function in shiny module
- mysql - 考虑到哪个表结构更好 - 更快的执行和最佳结构?