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沒問題。