Shell數(shù)組的奇技淫巧

?1 眾所周知,在Shell中可以這樣輸出變量的值
輸出值

2 也可以輸出變量的位數(shù)
輸出值

3.1 那末,定義一個數(shù)組,我們可以單個賦值

3.2 也可以一次性賦值(賦值同上)

那末,3+1,可以輸出數(shù)組中各元素的值
輸出值

同樣地,3+2,可以得到元素長度和數(shù)組長度
輸出值
其中@與*的區(qū)別如下:
@
輸出值
*
輸出值
可見,@是分元素,*是通配

由3+2結(jié)果可得兩點特性
計算數(shù)組長度時不會排除空元素
數(shù)組元素從0開始計算,可以得到數(shù)組長度
由特性,可得到在數(shù)組尾部擴充新元素的方法
輸出值
原理很好理解,由于元素序號由0開始計算,數(shù)組長度恰好就是下一個元素的序號

4 刪除元素
輸出值
去除了兩個空元素,數(shù)組長度為3,但是
輸出值為空
明明已經(jīng)刪除了1號與2號兩個空元素,后面的元素不會依次補全刪掉的位置。要想補全,就得刷新數(shù)組:
輸出值
此處的@不可替換為*,否則"1 2 3 4 5"會變成一個元素,不加引號都會變成五個元素

以下為兩個實踐項目:
1, 輸入數(shù)組元素個數(shù),并依次讀入數(shù)組
實踐如下
其實這個例子蠻牽強的,將第一個for循環(huán)中的ele_arr[${#ele_arr[@]}]替換為ele_arr[$i]也不會有任何問題。

2, 輸入一個正整數(shù),生成1到該正整數(shù)的數(shù)組,并打亂輸出(不重復(fù))
實踐如下
留下一個小問題,最后的xargs是干什么的?
自從用上了shellcheck+vim-syntastic,告別了很多錯誤&&危險寫法,非常推薦一試
本文基于LGPLv3協(xié)議(https://www.gnu.org/licenses/lgpl-3.0.zh-cn.html)開源