我写了以下代码:
awk -F"\t" '{
a[1]=1; a[2]=2; a[3]=3; a[4]=4; a[5]=5;
delete a[4];
print "len", length(a);
for( i =1; i<=length(a); i++)
print i"\t"a[i]
for( i in a)
print i"\t"a[i]
}' -
输出是:
len 4
1 1
2 2
3 3
4
5 5
4
5 5
1 1
2 2
3 3
我的问题是因为我删除了第4个元素,并且数组a
的长度变为4,所以为什么还有5个元素,当我打印数组时,第4个元素的值变为空白?这是否表明'删除'只删除了值,相应的索引仍然存在?
答案 0 :(得分:6)
删除中间for
循环,您将看到发生了什么:
$ echo x | awk -F"\t" '{
a[1]=1; a[2]=2; a[3]=3; a[4]=4; a[5]=5;
delete a[4];
print "len", length(a);
for( i in a)
print i"\t"a[i]
}'
len 4
2 2
3 3
5 5
1 1
删除工作正如您所期望的那样,删除索引为4的数组元素,留下4个带索引1,2,3和5的元素。(即使您使用的是数字索引,它仍然是一个关联数组和旧的a[5]
不现在可以a[4]
访问---它仍然是a[5]
。)
您在示例中看到五个元素的原因是中间for
循环:
for( i =1; i<=length(a); i++)
print i"\t"a[i]
只需在上面的print语句中引用a[4]
,就可以重新创建a
数组的元素,该索引的值为空值。