1. 程式人生 > >【Shell指令碼學習13】Shell陣列:shell陣列的定義、陣列長度

【Shell指令碼學習13】Shell陣列:shell陣列的定義、陣列長度

Shell在程式設計方面比Windows批處理強大很多,無論是在迴圈、運算。

bash支援一維陣列(不支援多維陣列),並且沒有限定陣列的大小。類似與C語言,陣列元素的下標由0開始編號。獲取陣列中的元素要利用下標,下標可以是整數或算術表示式,其值應大於或等於0。

定義陣列

在Shell中,用括號來表示陣列,陣列元素用“空格”符號分割開。定義陣列的一般形式為:
    array_name=(value1 ... valuen)
例如:

  1. array_name=(value0 value1 value2 value3)

或者

  1. array_name=(
  2. value0
  3. value1
  4. value2
  5. value3
  6. )


還可以單獨定義陣列的各個分量:

  1. array_name[0]=value0
  2. array_name[1]=value1
  3. array_name[2]=value2

可以不使用連續的下標,而且下標的範圍沒有限制。

讀取陣列

讀取陣列元素值的一般格式是:
    ${array_name[index]}
例如:

  1. valuen=${array_name[2]}

舉個例子:

  1. #!/bin/sh
  2. NAME[0]="Zara"
  3. NAME[1]="Qadir"
  4. NAME[2]="Mahnaz"
  5. NAME[3]="Ayan"
  6. NAME[4]="Daisy"
  7. echo "First Index: ${NAME[0]}"
  8. echo "Second Index: ${NAME[1]}"

執行指令碼,輸出:

$./test.sh
First Index: Zara
Second Index: Qadir

使用@ 或 * 可以獲取陣列中的所有元素,例如:

  1. ${array_name[*]}
  2. ${array_name[@]}

舉個例子:

  1. #!/bin/sh
  2. NAME[0]="Zara"
  3. NAME[1]="Qadir"
  4. NAME[2]="Mahnaz"
  5. NAME[3]="Ayan"
  6. NAME[4]="Daisy"
  7. echo "First Method: ${NAME[*]}"
  8. echo "Second Method: ${NAME[@]}"

執行指令碼,輸出:

$./test.sh
First Method: Zara Qadir Mahnaz Ayan Daisy
Second Method: Zara Qadir Mahnaz Ayan Daisy

獲取陣列的長度

獲取陣列長度的方法與獲取字串長度的方法相同,例如:

  1. # 取得陣列元素的個數
  2. length=${#array_name[@]}
  3. # 或者
  4. length=${#array_name[*]}
  5. # 取得陣列單個元素的長度
  6. lengthn=${#array_name[n]}