關於Bash中陣列的使用

2021-07-02 10:54:15 字數 1848 閱讀 7943

關於bash中的陣列,很多文章都已經介紹過。這裡我也簡單的寫一下:

一、基礎

bash只是提供了一維陣列,但沒有上限的限制。

1)宣告

# declare -a name

這樣就宣告了乙個name陣列。

2)賦值

給陣列的賦值可以參考普通變數的定義,如:

# name[0]=beijing

# name[1]=guangzhou

# name[2]=shenzhen

另外,還可以對整個陣列賦值:

# name=([0]=beijing [1]=guangzhou [2]=shenzhen) 或

# name=(beijing guangzhou shenzhen)

陣列元素之間以環境變數ifs的第乙個字元來分割。即空格。

若要跨過分隔符,可以這樣做:

# name=("this is beijing" guangzhou shenzhen)

3)引用

引用陣列,需要使用如下的架構,不要缺少了{}號:引用

$ 例如:

# echo $

beijing

另外,還有兩個特殊的符號,分別是*和@號,代指所有陣列元素:

# echo $  //*兩邊沒有空格,這裡如此表示是因為exblog會識別錯誤

beijing guangzhou shenzhen

# echo $

beijing guangzhou shenzhen

顯示整個陣列元素數量,則用:

# echo $ 3

4)登出

就當普通的變數,使用unset即可:

# unset name 或

# unset name[0]

2、公升級

明白了陣列的定義和使用,就可以在bash裡面方便的使用了。

假設,有如下的目錄:

# ls -l

total 0

-rw-r--r--  1 root  wheel  0 dec 28 11:39 001

-rw-r--r--  1 root  wheel  0 dec 28 11:39 002

-rw-r--r--  1 root  wheel  0 dec 28 17:49 003

-rw-r--r--  1 root  wheel  0 dec 28 17:49 004

我現在要把這個目錄下所有檔案的檔名放到乙個name陣列中,方便在指令碼裡面使用。

# declare -a filename

# filename=(`ls -l|grep 00|awk ''|sed -e :a -e '$!n;s/\\n/ /;ta'`)

# set|grep filename

filename=([0]="001" [1]="002" [2]="003" [3]="004")

# echo $

001 002 003 004

上述的語句,其實就是使用了grep、awk、sed等把一列的字元轉換為用()號包括,並用空格分開的字串,這樣就可以給filename陣列賦值了。

基於同樣的原理,如果我們希望把乙個檔案裡面一列的字串都賦值到乙個陣列裡面的話,可以這樣:

# cat test

test-001

test-002

test-003

test-004

# filename=(`cat test|sed -e :a -e '$!n;s/\\n/ /;ta'`) 

# set|grep filename

filename=([0]="test-001" [1]="test-002" [2]="test-003" [3]="test-004")

bash中的陣列

定義 array 1 two 3 four array index value 訪問陣列元素 array必須用大括號括起來 獲取陣列所有元素 元素之間以空格分隔 獲取陣列長度 按下標遍歷 for i in seq 1 do echo i,done 按元素遍歷 必須加雙引號 for var in 注 ...

關於陣列的使用

陣列的操作方法 四個必須記住的操作方法 push 最後一位追加 pop 刪除最後一位 shift 在第一位追加 靜態方法 array.isarray 值 陣列的屬性 length 陣列的方法 arr.concat arr1 把arr1拼接早arr後邊,返回值是新陣列 不會改變原陣列 arr.inde...

使用bash關聯陣列統計單詞

從bash 4開始支援關聯陣列,使用前需要宣告,即 declare a map map key1 value1 map key2 value2 map key1 value1 key2 value2 獲取keys keys 獲取values values 利用關聯陣列,很容易實現單詞統計,原始碼檔案...