• 正文
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

IC腳本之?dāng)?shù)組 | 從Shell到Tcl到Perl

2024/09/27
1.5萬
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

1Shell數(shù)組

shell中的數(shù)組是一個比較特殊的存在。因為在shell中定義變量時總是默認(rèn)就被定義為數(shù)組類型變量。除非我們使用declare命令顯式指定變量為其它類型。

換句話說,shell中的數(shù)組其實就是多個普通變量的組合而已。事實也確實如此,對數(shù)組的大多數(shù)操作方式在普通變量中同樣有效。

 

1.1創(chuàng)建數(shù)組

 

1.1.1直接創(chuàng)建

與創(chuàng)建普通變量一樣,直接使用=賦值即可。如:

以下是一個示例程序:

該程序創(chuàng)建了一個名為 array 的數(shù)組,該數(shù)組擁有 3 個元素內(nèi)容。與傳統(tǒng)編程語言一樣,shell中的數(shù)組的起始下標(biāo)也是0。不過,與傳統(tǒng)編程語言不一樣的地方是:shell中的數(shù)組允許“跳躍式創(chuàng)建”。一般的編程語言里,甚至在我們的潛意識里,都認(rèn)為數(shù)組的創(chuàng)建及賦值必須是按順序來的,先把前面的槽位用值填上了才可繼續(xù)后面的填充。但shell卻可以跳躍著來填值。以下是一個shell數(shù)組跳躍式創(chuàng)建的示例程序:

該程序是完全合法的。這樣創(chuàng)建出來的數(shù)組其實內(nèi)部只有 3 個元素,只不過它們的位置確實是在 1 號、3號及10號而已。中間其它下標(biāo)的值為空。

另外,同樣可以使用 declare 命令顯式創(chuàng)建數(shù)組,語法如下:

1.1.2使用元組創(chuàng)建

使用元組創(chuàng)建數(shù)組與直接賦值創(chuàng)建相比唯一的區(qū)別就是:可以嚴(yán)格按照順序來填充值。以下是語法示例:

1.1.3創(chuàng)建關(guān)聯(lián)數(shù)組

shell中的關(guān)聯(lián)數(shù)組其實就是一種映射集合的關(guān)系。簡單說,它允許我們自定義數(shù)組中的索引下標(biāo)的值,將傳統(tǒng)的 0 1 2 3 4 索引下標(biāo)替換成任意字符串以方便使用 array[key] 的方式查找元素值。以下是關(guān)聯(lián)數(shù)組創(chuàng)建的語法示例:

以上程序使得后續(xù)可以在數(shù)組的索引中傳入對應(yīng)的字符串型下標(biāo)來查找對應(yīng)的元素值,這本質(zhì)上就是一個key-value對形式的映射集合了,已經(jīng)有點超越了普通數(shù)組的范疇了。不過,關(guān)聯(lián)數(shù)組是一個后來才出現(xiàn)的功能。使用關(guān)聯(lián)數(shù)組前必須先以-A參數(shù)顯式聲明數(shù)組變量,且運行shell腳本代碼的bash的版本不得低于4.0。

 

1.2獲取數(shù)組長度

 

1.3獲取數(shù)據(jù)列表

 

 

1.4讀取某下標(biāo)賦值

 

 

1.5數(shù)組遍歷

 

 

1.6數(shù)組切片

 

 

1.7數(shù)組替換

 

 

1.8數(shù)組刪除

 

 

1.9追加數(shù)組元素

 

 

1.10向函數(shù)傳數(shù)組參數(shù)

 

2Tcl

 

2.1創(chuàng)建數(shù)組

 

數(shù)組是一組使用索引對應(yīng)元素的排列方式。常規(guī)數(shù)組的語法如下所示。

用于創(chuàng)建簡單數(shù)組的例子,如下所示。

當(dāng)上述代碼被執(zhí)行時,它會產(chǎn)生以下結(jié)果。

 

2.2數(shù)組大小

 

用于計算數(shù)組大小的語法,如下所示。

用于打印數(shù)組的大小的示例如下所示。

當(dāng)上述代碼被執(zhí)行時,它會產(chǎn)生以下結(jié)果。

 

2.3數(shù)組迭代

 

雖然數(shù)組索引可以是非連續(xù)的,像索引1,然后索引10等指定的值。但是如果它們是連續(xù)的,我們可以用數(shù)組迭代訪問數(shù)組的元素。一個簡單的數(shù)組迭代的打印元素,如下所示。

當(dāng)上述代碼被執(zhí)行時,它會產(chǎn)生以下結(jié)果。

 

2.4關(guān)聯(lián)數(shù)組

 

在TCL,所有數(shù)組本質(zhì)是相關(guān)聯(lián)的。數(shù)組存儲并沒有任何具體的順序進(jìn)行檢索。關(guān)聯(lián)數(shù)組使用索引但不一定都是數(shù)字。一個簡單的例子,關(guān)聯(lián)數(shù)組與非數(shù)字索引如下所示。

當(dāng)上述代碼被執(zhí)行時,它會產(chǎn)生以下結(jié)果。

 

2.5數(shù)組的索引

 

用于檢索數(shù)組索引的語法如下所示。

用于打印數(shù)組的大小的示例如下所示。

當(dāng)上述代碼被執(zhí)行時,它會產(chǎn)生以下結(jié)果。

 

 

2.6多維數(shù)組

 

在有些時候,可能需要象 C 語言這樣:

來定義一個多維數(shù)組來處理數(shù)據(jù)。Tcl 并沒有直接支持這種數(shù)組的格式,使用者自己可以定義所謂的多維數(shù)組,如:

 

由于 Tcl 數(shù)組索引的靈活性,使用時要小心,否則可能得不到預(yù)期的結(jié)果,如忘記了上面索引的逗號,就成了:

 

 

2.7數(shù)組操作指令

 

array get?命令

array get 命令提取數(shù)組索引、元素值對并將這些值對組織成一個列表。而 array ?set 命令?則將一個列表(數(shù)據(jù)要成對)轉(zhuǎn)換成一個數(shù)組。例

 

array names命令

array names 返回所有元素索引名與模式 pattern 匹配的元素索引名列表。模式 pattern 和 string match 的模式格式相同。如果 pattern 沒有指定,則返回所有數(shù)組元素索引名列表。

 

3Perl

Perl 數(shù)組一個是存儲標(biāo)量值的列表變量,變量可以是不同類型。數(shù)組變量以?@?開頭。訪問數(shù)組元素使用?$ +?變量名稱?+ [索引值]?格式來讀取,實例如下:

程序中?$?符號使用了??來轉(zhuǎn)義,讓他原樣輸出。

執(zhí)行以上程序,輸出結(jié)果為:

 

3.1創(chuàng)建數(shù)組

 

數(shù)組變量以?@?符號開始,元素放在括號內(nèi),也可以以 qw 開始定義數(shù)組。

第二個數(shù)組使用 qw//?運算符,它返回字符串列表,數(shù)組元素以空格分隔。當(dāng)然也可以使用多行來定義數(shù)組:

你也可以按索引來給數(shù)組賦值,如下所示:

 

3.2訪問數(shù)組元素

 

訪問數(shù)組元素使用?$ +?變量名稱?+ [索引值]?格式來讀取,實例如下:

執(zhí)行以上程序,輸出結(jié)果為:

數(shù)組索引值從?0?開始,即?0?為第一個元素,1 為第二個元素,以此類推。負(fù)數(shù)從反向開始讀取,-1 為第一個元素,?-2 為第二個元素。

 

 

3.3數(shù)組序列號

 

Perl 提供了可以按序列輸出的數(shù)組形式,格式為?起始值?+ .. +?結(jié)束值,實例如下:

執(zhí)行以上程序,輸出結(jié)果為:

 

3.4數(shù)組大小

 

數(shù)組大小由數(shù)組中的標(biāo)量上下文決定:

執(zhí)行以上程序,輸出結(jié)果為:

數(shù)組長度返回的是數(shù)組物理大小,而不是元素的個數(shù),我們可以看以下實例:

執(zhí)行以上程序,輸出結(jié)果為:

從輸出的結(jié)果可以看出,數(shù)組元素只有四個,但是數(shù)組大小為 51。

 

3.5添加和刪除數(shù)組元素

 

Perl 提供了一些有用的函數(shù)來添加和刪除數(shù)組元素。如果你之前沒有編程經(jīng)驗,可能會問什么是函數(shù),其實我們之前使用的 print 即是一個輸出函數(shù)。下表列出了數(shù)組中常用的操作函數(shù):

執(zhí)行以上程序,輸出結(jié)果為:

 

3.6切割數(shù)組

 

我們可以切割一個數(shù)組,并返回切割后的新數(shù)組:

執(zhí)行以上程序,輸出結(jié)果為:

數(shù)組索引需要指定有效的索引值,可以是正數(shù)后負(fù)數(shù),每個索引值使用逗號隔開。如果是連續(xù)的索引,可以使用 .. 來表示指定范圍:

執(zhí)行以上程序,輸出結(jié)果為:

 

3.7替換數(shù)組元素

 

Perl 中數(shù)組元素替換使用 splice()?函數(shù),語法格式如下:

參數(shù)說明:

?@ARRAY:要替換的數(shù)組。

?OFFSET:起始位置。

?LENGTH:替換的元素個數(shù)。

?LIST:替換元素列表。

以下實例從第6個元素開始替換數(shù)組中的5個元素:

執(zhí)行以上程序,輸出結(jié)果為:

 

3.8將字符串轉(zhuǎn)換為數(shù)組

 

Perl 中將字符串轉(zhuǎn)換為數(shù)組使用 split()?函數(shù),語法格式如下:

參數(shù)說明:

?PATTERN:分隔符,默認(rèn)為空格。

?EXPR:指定字符串?dāng)?shù)。

?LIMIT:如果指定該參數(shù),則返回該數(shù)組的元素個數(shù)。

執(zhí)行以上程序,輸出結(jié)果為:

 

3.9將數(shù)組轉(zhuǎn)換為字符串

 

Perl 中將數(shù)組轉(zhuǎn)換為字符串使用 join()?函數(shù),語法格式如下:

參數(shù)說明:

?EXPR:連接符。

?LIST:列表或數(shù)組。

執(zhí)行以上程序,輸出結(jié)果為:

3.10數(shù)組排序

 

Perl 中數(shù)組排序使用 sort() 函數(shù),語法格式如下:

參數(shù)說明:

?SUBROUTINE:指定規(guī)則。

?LIST:列表或數(shù)組。

執(zhí)行以上程序,輸出結(jié)果為:

注意:數(shù)組排序是根據(jù) ASCII 數(shù)字值來排序。所以我們在對數(shù)組進(jìn)行排序時最好先將每個元素轉(zhuǎn)換為小寫后再排序。

3.11特殊變量:$[

 

特殊變量?$[?表示數(shù)組的第一索引值,一般都為 0 ,如果我們將?$[?設(shè)置為 1,則數(shù)組的第一個索引值即為 1,第二個為 2,以此類推。實例如下:

執(zhí)行以上程序,輸出結(jié)果為:

一般情況我們不建議使用特殊變量?$[,在新版 Perl 中,該變量已廢棄。

 

3.12合并數(shù)組

 

數(shù)組的元素是以逗號來分割,我們也可以使用逗號來合并數(shù)組,如下所示:

執(zhí)行以上程序,輸出結(jié)果為:

也可以在數(shù)組中嵌入多個數(shù)組,并合并到主數(shù)組中:

執(zhí)行以上程序,輸出結(jié)果為:

 

3.13從列表中選擇元素

 

一個列表可以當(dāng)作一個數(shù)組使用,在列表后指定索引值可以讀取指定的元素,如下所示:

執(zhí)行以上程序,輸出結(jié)果為:

同樣我們可以在數(shù)組中使用 .. 來讀取指定范圍的元素:

執(zhí)行以上程序,輸出結(jié)果為:

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄

前華為海思工程師;與非網(wǎng)2022年度影響力創(chuàng)作者;IC技術(shù)圈成員。

微信公眾號