【发布时间】:2020-12-19 20:07:41
【问题描述】:
我必须使用循环来清除关联数组中的一些数据,还是有更快更好的选择?
目前我正在使用:
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
【问题讨论】:
-
内部循环会更容易,特别是如果有很多数字,例如:
for x in {2..5}; do hnr[$ploop,$x]=0; done;如果您想删除/删除元素:unset hnr[$ploop,3]或在循环中unset hnr[$ploop,$x]甚至unset hnr[$ploop,{2..5}];我不知道有什么方法可以做hnr[$ploop,{2..5}]=0之类的事情(不是说不能做,我只是不知道有什么方法) -
@markp-fuso 但我仍然需要将它们放在一个循环中以计算 $ploop 数量?
-
对,2 个循环:外循环:
until [[ ... ]]; do ((++ploop1)); <inner_loop>; done和内循环:for x in {2..5}; do hnr[$ploop,$x]=0; done;或者如果你想unset元素你可以用unset hnr[$ploop,{2..5}]替换内部循环@ -
@markp-fuso so unset=清除数组中当前指定位置的数据?
-
您提到了
clear the data,但实际上并没有清除数据……您将数据设置为0,即数组元素仍然存在;另一方面...unset将清除、删除、删除、核对数组元素,即数组元素不再存在;并且 fwiw ... 刚刚发现eval hnr[$ploop,{2..5}]=0似乎有效(即,4 个数组元素被 设置 为0),但请记住,有些人可能会对此想法嗤之以鼻使用eval,ymmv ...
标签: bash shell loops associative-array