1 定義陣列
通過指定元素值來定義陣列:
array[key]=value
eg. array[1]=one array[3]=three
shell中的陣列的下標(索引)從0開始
也可以通過declare語句定義陣列
declare -a array (沒必要,在shell中,所有的變數都不必顯式定義就可以用作陣列)
通過元素值集合定義陣列:
array=( v0 v1 v2 ... vn)
通過鍵值對定義陣列:
array=([0]=value0 [1]=value1 ... [n]=valuen)
當通過鍵值對定義陣列時,使用者所提供的鍵值對中的元素索引不一定是連續的,可以任意指定要賦值的元素的索引。
實際上,shell中的陣列的索引並不僅僅是數字,還可以是字串,這稱為關聯陣列。使用時,需要先使用declare語句來宣告陣列。
eg.
declare -a array
2 陣列和普通變數
在shell中,所有的普通變數實際上都可以當做陣列變數來使用。對普通變數操作與對相同名稱的下標為0的元素的操作是等效的。
array="hello world"
echo "$" //輸出第乙個元素的值 hello world
echo "$" //輸出所有元素的值 hello world
當定義乙個普通變數時,實際上可以以陣列的形式來操作該變數,但這個陣列只有乙個元素。
3 陣列的賦值
按索引為元素賦值:
array[n]=valuen
通過集合為陣列賦值:
通過集合為陣列賦值與通過集合定義陣列的語法完全相同。當新值的個數超過原來的陣列長度時,shell會在陣列末尾追加新的元素;當新的值的個數少於原來的陣列長度時,shell會將新的值從第乙個元素開始賦值,然後刪除超出的元素。
在使用值集合時,如果某個值中含有空格,則需要使用單引號或者雙引號將其引用起來,否則會認為是兩個元素值。
在陣列末尾追加新元素:
在shell中,向已有的陣列末尾追加新的元素非常方便,在通過索引為陣列元素賦值時,如果指定的索引不存在,則shell會自動新增乙個新的元素,並將指定的值賦給該元素。
4 訪問陣列
在shell中,當直接使用陣列名來訪問陣列時,得到的是下標為0的元素的值。
array=(1 2 3 4 5)
echo "$array" // 輸出:1
通過下標訪問陣列:shell中陣列從0開始,與c++等語言保持一致。
計算陣列的長度:
使用者可以通過$#來獲得陣列的長度 echo "$"
還可以獲取某個元素的長度 $ 第n個元素的長度
引用所有陣列元素:
當使用者使用@或者*引用所有的陣列元素時,shel會將所有的陣列元素的值列舉出來,這些值之間用空格隔開。
for e in "$"
5 以切片方式獲取部分陣列元素
$ 得到乙個空格隔開的多個元素值組成的字串
($) 得到乙個切片陣列
$ 對陣列元素進行切片,擷取某個陣列元素的一部分,得到乙個子字串。
無論對陣列切片還是對陣列元素切片,如果其中的長度值超過陣列或者陣列元素的長度,都會擷取到陣列或者陣列元素的末尾為止。
6 陣列元素的替換
所謂替換,是指將某個元素的部分內容用其他的字串來代替,但並不影響原來的陣列的值。
$pattern表示要搜尋的字串,replacement表示用來替換的字串
替換操作並不影響陣列的原始值。
7 刪除陣列
使用unset命令來刪除某個陣列元素:
unset array[n]
刪除整個陣列:
unset array
8 複製陣列
將乙個陣列的全部內容儲存到另外乙個新的陣列中
newarray=("$")
9 連線陣列
將2個陣列的陣列元素連線在一起,變成乙個大的陣列。新的陣列一次包含2個陣列的所有的元素。
("$" "$")
注:中間要有乙個空格!
10 載入檔案內容到陣列
使用者可以將普通的文字檔案內容直接載入到陣列中,檔案的每一行構成陣列的乙個元素的內容。
eg.content=(`cat demo.txt`)
for s in "$"
doecho "$s"
done
Shell程式設計 陣列
1.4 求陣列最大值 1.5 示例 1.6 陣列的操作 1.7 shell指令碼除錯 1.3.1 陣列包括的資料型別 陣列只可存放數值或字元 1.3.2 陣列操作第一種方法每個元素和他後面的元素挨個比 大的放後面 root shell shuzu vimshuzu paixu.sh bin bash...
shell程式設計陣列
一.陣列 陣列簡介 變數 用乙個固定的字串,代替乙個不固定字串。陣列 用乙個固定的字串,代替多個不固定字串。型別普通陣列 只能使用整數作為陣列索引 關聯陣列 可以使用字串作為陣列索引 圖示 變數切片有個索引的概念。乙個索引 整數 對應乙個字元。普通陣列 中的索引對應乙個字串。關聯陣列 陣列中的索引可...
shell 程式設計 2 陣列
陣列 只支援一維,不限定大小。下標由0開始,可以是整數或算數表示式,大於或等於0。1.定義陣列 arr name val0,val1,valn arr name val00 val11 arr name n valuen 下標可以不連續。root k8s master test0 arr name ...