shell内建命令unset和shell数组操作

unset命令

作用:删除变量或者函数

语法:unset  [-fv]  变量名或函数名

-f   仅删除函数

-v   仅删除变量

此命令多用于删除环境变量,不过本人经常用它来删除数组的元素,但是需要注意,用unset操作数组风险较大,稍有不慎就会出错。例如:

  
  
  
  
  1. a=(0 1 2 3 4 5) 
  2. echo ${#a[@]}            #输出6 
  3. unset a[0] 
  4. echo ${#a[@]}            #输出5 
  5. echo ${a[@]}             #输出1 2 3 4 5 

到此好像也没什么问题,继续

  
  
  
  
  1. echo ${a[0]}        #输出空,而不是预想的1 
  2. 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没问题。

 

本文出自 “窈窕魑魅” 博客,谢绝转载!

你可能感兴趣的:(shell数组,unset命令)