unset命令
作用:删除变量或者函数
语法:unset [-fv] 变量名或函数名
-f 仅删除函数
-v 仅删除变量
此命令多用于删除环境变量,不过本人经常用它来删除数组的元素,但是需要注意,用unset操作数组风险较大,稍有不慎就会出错。例如:
a=(0 1 2 3 4 5)
echo ${#a[@]} #输出6
unset a[0]
echo ${#a[@]} #输出5
echo ${a[@]} #输出1 2 3 4 5
到此好像也没什么问题,继续
echo ${a[0]} #输出空,而不是预想的1
echo ${a[1]} #输出1,而不是预想的2
这是怎么回事呢?以下是本人总结的:
第1步:shell给出了6个位置,分别放0、1、2、3、4、5,并且分别给它们编了号0、1、2、3、4、5,并且把这些位置和编号的对应关系记下来,这种关系是不会轻易改变的。
第2步:输出元素的个数,肯定是6没问题。
第3步:删除0号元素(也就是0),这里的删除其实是把位置清空,但位置还在。并不会出现第三种情况那样的,就是0号元素没了之后其他元素依次往前推,而最后一个位置消失的情况。
第4步:输出元素个数,肯定是5个没问题。
第5步:输出各元素,肯定是1 2 3 4 5
第6步:输出a[0],此时0号位置根本没元素,肯定是空。
第7步:输出a[1],此时1号位置放的就是1没问题。