Shell中的陣列

2021-06-22 12:50:43 字數 3981 閱讀 1345

二維陣列:

構造成這樣:a=(1 2 3 4 5 6 7 8 9),然後操作的時候利用第i行j列的元素等於i*len+j,len是陣列的第二維度大小,這樣做有時候更簡單,但是就必須得控制一下邊界了,比如3*3的陣列,你可能初始化只給出8個元素。

一、陣列和字串

array[3] = "a b c" echo $array[1]  輸出b,

str=「a b c」 array = ($str) echo$array[1],同樣輸出b,要注意: array = ($str)中的右值的括號不能缺

上面這個就是我們常說的把字串放到乙個陣列中,也可以理解為動態陣列,比c和c++簡單多了

計算字串長度可用的三種方法:

echo 「$str」|awk ''

expr length 「$str」

echo 「$str」|wc -c

但是第三種得出的值會多1,可能是把結束符也計算在內了

判斷字串為空的方法有三種:

if [ "$str" =  "" ] 

if [ x"$str" = x ]

if [ -z "$str" ] 

二、其他型別的陣列

arr=(123 34 3 5) echo $arr,輸出123,在這裡等同於echo $;

echo $,輸出34,注意格式,除了首位址,必須要加上{},否則會出錯

三、陣列的長度和遍歷

length=$----陣列的長度,這裡的長度是最大下標

echo $-------輸出陣列全部元素

array[1]=5--------------向陣列的某個元素賦值和標c的語法一樣

echo $---輸出的是array[0]和array[1]的值

echo $-----輸出陣列第三個元素以後的值

echo $-----輸出陣列下標小於2的值

$ echo $ ----取得元素3的長度

unset array--------------清除array

array=------------------清空array,賦給array空值

遍歷字串方法一

for ((i=0;i

doecho $

done

遍歷字串方法二

str="a --m"

for i in $str

doecho $i

done

用while遍歷

len=$

i=0while [ $i -lt $len ]

doecho $

let i++

done

四、其他:

array[3] = "a b c"和array[3] = a b c這兩個是等價的;如果array[3] = "a "bc"",想要查詢",用awk是找不到的,單引號

是可以找到的,就是雙引號找不到;我們可以用擷取字串的方法來判斷是否雙引號,擷取的字串的方法如下:

$ 從左向右擷取最後乙個string後的字串

$從左向右擷取第乙個string後的字串

$從右向左擷取最後乙個string後的字串

$從右向左擷取第乙個string後的字串

將上面的string換成「即可,然後在判斷字串的長度,如果相等就是沒有,如果不相等就是有雙引號,不可以

用更改陣列分隔符的方法,那樣做無效,這個雙引號是shell內建的符號。

通用的awk查詢方法,例如:

find=`echo |awk 'begin'`;

也可以用math和index方法,例如:flag=`echo |awk ''` 

陣列預設的分隔符是空格,如果想改變預設的分隔符,用下面的方法

str="abd#ddd#ff";str2=($(echo $str|tr ''#''|tr -s ''));

本帖最後由 haokanwk 於 2010-09-03 14:47 編輯

不知道 是什麼時候寫的東西,整理文件時被考古發現,給那些閒著蛋疼之人,一笑而過吧。如果本文中的錯誤給您帶來所有的精神損失,請找保險公司理陪!當然你可以告訴我 (傾訴)

陣列作為一種特殊的資料結構在任何一種程式語言中都有它的一席之地,當然bash shell也不例外。本文就shell陣列來做乙個小的總結。

在這裡只討論一維陣列的情況,關於多維陣列(事實上,你得用一維陣列的方法來模擬),不涉及。這裡包括陣列的複製,計算,刪除,替換。

陣列的宣告:

1)array[key]=value # array[0]=one,array[1]=two

複製**

2)declare -a array # array被當作陣列名

複製**

3)array=( value1 value2 value3 ... )

複製**

4)array=( [1]=one [2]=two [3]=three ... )

複製**

5)array="one two three" # echo $,把array變數當作陣列來處理,但陣列元素只有字串本身

複製**

陣列的訪問:

1)$ # $

複製**

陣列的刪除

1)unset array[1] # 刪除陣列中第乙個元素

複製**

2)unset array # 刪除整個陣列

複製**

計算陣列的長度:

1)$複製**

2)$ #同上。 $ 、$。注意同#的區別

複製**

陣列的提取

從尾部開始提取:

array=( [0]=one [1]=two [2]=three [3]=four )

$ # two three four,除掉第乙個元素後所有元素,那麼$表示所有元素

$ # one two

$ # two three

子串刪除

[root@localhost dev]# echo $

one two three four

複製**

[root@localhost dev]# echo $ # 左邊開始最短的匹配:"t*e",這將匹配到"thre"

one two e four

複製**

[root@localhost dev]# echo $ # 左邊開始最長的匹配,這將匹配到"three"

複製**

[root@localhost dev]# array=( [0]=one [1]=two [2]=three [3]=four )

複製**

[root@localhost dev]# echo $ # 從字串的結尾開始最短的匹配

one tw three four

複製**

[root@localhost dev]# echo $ # 從字串的結尾開始最長的匹配

one tw three four

複製**

子串替換

[root@localhost dev]# array=( [0]=one [1]=two [2]=three [3]=four )

複製**

第乙個匹配到的,會被刪除

[root@localhost dev]# echo $

mne twm three fmur

複製**

所有匹配到的,都會被刪除

[root@localhost dev]# echo $

mne twm three fmur

複製**

沒有指定替換子串,則刪除匹配到的子符

[root@localhost dev]# echo $

ne tw three fur

複製**

替換字串前端子串

[root@localhost dev]# echo $

kne two three four

複製**

替換字串後端子串

[root@localhost dev]# echo $

one twk three four

複製**

Shell中的陣列

一 陣列和字串 array 3 a b c echo array 1 輸出b,str a b c array str echo array 1 同樣輸出b,要注意 array str 中的右值的括號不能缺 上面這個就是我們常說的把字串放到乙個陣列中,也可以理解為動態陣列,比c和c 簡單多了 計算字串...

shell中的陣列

shell作為一門語言那肯定是不能缺少陣列了,下面記錄了shell中陣列的一些相關內容。bash 提供了一維陣列變數。任何變數都可以作為乙個陣列 內建命令 declare 可以顯式地定義陣列。陣列的大小沒有上限,也沒有限制在連續對成員引用和賦值時有什麼要求。陣列以整數為下標,從 0 開始。下面的示例...

Shell中的陣列

陣列元素的格式 array index index從0開始。定義陣列 在bash中定義陣列有兩種方法 1 直接在定義時為所有的陣列元素賦值 root localhost shell array 123 45 2 對陣列中每個陣列元素進行賦值 root localhost shell array 0 ...