Bash : 索引數組

Bash 提供了兩種類型的數組,分別是索引數組(indexed array)和關聯數組(associative array)。本文主要介紹索引數組的基本用法。

索引數組的基本特點

Bash 提供的數組都是一維數組。
任何變量都可以用作索引數組。
通過 declare 關鍵字可以顯式的聲明一個索引數組。
數組的大小是不受限制的。
索引數組的元素的索引不必是連續的。
通過從零開始的整數引用數組元素。
除非另外注明,索引數組必須使用非負的整數索引元素。

自動創建索引數組

通過賦值語句可以隱式的創建索引數組:

$?myArr[0]=apple

通過給索引為 0 的元素賦值,變量 myArr 會被初始化成一個索引數組。
當然也可以這樣:

$?myArr[3]=orange

不用必須從索引 0 開始賦值。

顯式聲明一個索引數組

通過 declare 關鍵字和 -a 選項可以顯式的聲明索引數組:

$?declare?-a?myArr

然后進行初始化:

$?myArr=(apple?orange?pear)

也可以在聲明的時候進行初始化:

$?declare?-a?myArr=(apple?orange?pear)

或者在聲明后只初始化某個元素:

$?myArr[0]=grape

引用數組元素

引用數組元素稍微麻煩些,不僅要指定元素的索引位置,還需要使用 ${} 符號。請注意,索引數組的下標從 0 開始,且不能為負數(真希望所有編程語言中的數組元素都從 0 開始索引!)。

$?myArr[0]=apple
$?echo?${myArr[0]}

如果不小心引用了沒有賦值的元素呢?不用擔心,這里沒有程序崩潰的問題,只不過沒有輸出內容而已:

我們還可以輕松的輸出數組的全部元素:

$?declare?-a?myArr=(apple?orange?pear)
$?myArr[10]=grape
$?echo?${myArr[@]}

第四個元素的索引是不連續的。我們可以獲取到所有已經賦值元素的下標進行查看:

$?echo?${!myArr[@]}

變量也可以用來索引數組元素:

$?declare?-a?myArr=(apple?orange?pear)
$?i=2$?echo?${myArr[$i]}

對于索引數組,如果你不按規矩引用數組元素可能產生一些詭異的狀況。比如,用一個字符串代替非負的整數去索引元素會發生什么?

$?declare?-a?myArr=(apple?orange?pear)
$?echo?${myArr[hello]}

這往往不是你想要的結果。實際上,無論你寫什么樣的字符串,都會被當做 0 來處理。

添加數組元素

比較常見的數組操作是在數組的尾部添加新的元素(嚴謹點說,這應該是隊列的一個特征!):

$?declare?-a?myArr=(apple?orange?pear)
$?myArr=("${myArr[@]}"?grape)
$?echo?${myArr[@]}

請注意最后一行的輸出,這樣添加的元素的索引是連續的。

把兩個數組連接成一個也是比較常見的操作:

$?declare?-a?myAbc=(a?b?c)
$?myArr=("${myArr[@]}"?"${myAbc[@]}")
$?echo?${myArr[@]}

提取子數組

提取部分數組元素:

$?declare?-a?myArr=(a?b?c?d?e?f?g)
$?echo?${myArr[@]:2:3}

數組的長度

在 Bash 中,引用數組長度的語法多少有些奇特:

$?declare?-a?myArr=(apple?orange?pear)
$?echo?${#myArr[@]}

數組長度是指被賦值了的元素個數:

$?myArr[10]=grape
$?echo?${#myArr[@]}

我們還可以獲取到某個元素的長度:

哈哈,看起來有些像二維數組了!

遍歷數組元素

通過 for 語句可以像其它編程語言那樣遍歷數組中的元素:

$?declare?-a?myArr=(apple?orange?pear)
$?myArr[10]=grape
$?for?element?in?"${myArr[@]}";?do?echo?$element?done

刪除數組元素

$?declare?-a?myArr=(apple?orange?pear)
$?unset?myArr[1]
$?echo?${myArr[1]}

索引為 1 的元素已經為空了,其實數組的長度也發生了變化:

$?echo?${#myArr[@]}

此時數組的長度已經變成了 2。

下面來個復雜點的:

$?declare?-a?myArr=(a?b?c?d?e?f)
$?myArr=("${myArr[@]:0:3}"?"${myArr[@]:4}")

上面的代碼移除了元素 d:

清空數組

$?declare?-a?myArr=(apple?orange?pear)
$?unset?myArr
$?echo?${myArr[@]}




本文轉自xsster51CTO博客,原文鏈接: ,如需轉載請自行聯系原作者













本文轉自xsster51CTO博客,原文鏈接:?http://blog.51cto.com/12945177/1948527,如需轉載請自行聯系原作者


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/454044.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/454044.shtml
英文地址,請注明出處:http://en.pswp.cn/news/454044.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Flask 第三方組件之 login

在了解使用Flask來實現用戶認證之前,我們首先要明白用戶認證的原理。假設現在我們自己去實現用戶認證,需要做哪些事情呢? 首先,登錄。用戶能夠輸入用戶名和密碼進行登錄,所以需要網頁和表單,實現用戶輸入和…

Zookeeper客戶端Curator使用詳解

http://www.jianshu.com/p/70151fc0ef5dZookeeper客戶端Curator使用詳解 簡介 Curator是Netflix公司開源的一套zookeeper客戶端框架,解決了很多Zookeeper客戶端非常底層的細節開發工作,包括連接重連、反復注冊Watcher和NodeExistsException異常等等。Pat…

python argparse nargs_Python | 使用argparse解析命令行參數

今天是Python專題第27篇文章,我們來聊聊Python當中的命令行參數工具argparse。命令行參數工具是我們非常常用的工具,比如當我們做實驗希望調節參數的時候,如果參數都是通過硬編碼寫在代碼當中的話,我們每次修改參數都需要修改對應…

Python 第三方模塊之 smtplib

1 python對SMTP的支持 SMTP(Simple Mail Transfer Protocol)是簡單傳輸協議,它是一組用于用于由源地址到目的地址的郵件傳輸規則。 python中對SMTP進行了簡單的封裝,可以發送純文本郵件、HTML郵件以及帶附件的郵件。兩個核心模塊…

Node.js 使用jQuery取得Nodejs http服務端返回的JSON對象示例

server.js代碼: // 內置http模塊,提供了http服務器和客戶端功能(path模塊也是內置模塊,而mime是附加模塊) var httprequire("http");// 創建服務器,創建HTTP服務器要調用http.createServer()函數&#xff0c…

linux下gdb單步調試

用 GDB調試程序 GDB 概述 ———— GDB 是 GNU開源組織發布的一個強大的 UNIX下的程序調試工具。或許,各位比較喜歡那種圖形界面方式的,像 VC、 BCB等 IDE的調試,但如果你是在 UNIX平臺下做軟件,你會發現 GDB這個調試工具有比 V…

svg 動畫_根據AI導出的SVG path制作SVG線條動畫

點擊右上方紅色按鈕關注“web秀”,讓你真正秀起來前言首先祝大家2019新年快樂,萬事大吉,豬事順利,闔家歡樂。前面文章SVG 線條動畫基礎入門知識學習到了基礎知識,現在來給大家講講如何制作SVG 制作復雜圖形線條動畫。假…

MySQL提示Truncated incorrect DOUBLE value解決方法

“Truncated incorrect DOUBLE value”的解決方法主要是這兩種: 1、修改了多個列的值而各列之間用逗號連接而不要用and 錯誤寫法示例:update tablename set col1value1 and col2value2 where col3value3;正確寫法示例:update ta…

一個完美的導航樹

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns"http://www.w3.org/1999/xhtml" ><head><title>無標題頁</title><…

自定義python框架_Python web 框架Sanic 學習: 自定義 Exception

Sanic 是一個和類Flask 的基于Python3.5的web框架&#xff0c;它使用了 Python3 異步特性&#xff0c;有遠超 flask 的性能。編寫 RESTful API 的時候&#xff0c;我們會定義特定的異常錯誤類型&#xff0c;比如我定義的錯誤返回值格式為&#xff1a;{"error_code": …

文字水印

using System.Threading.Tasks;using System.IO;using System.Drawing; public static int Shuy(string Sname,string fname) { try { Image image Image.FromFile(fname); Graphics gra Graphics.FromImage(image); String text Sname; Font font new Font("宋體&quo…

讀書筆記2013第3本:《無價》

《無價》這本書是過年前買的&#xff0c;網絡書店上寫著“老羅推薦”&#xff0c;想著好像是在老羅哪一年的演講里聽過這本書&#xff0c;在豆瓣上評分7.9。讀書是為了產生行動&#xff0c;讀書時要提的4個問題&#xff0c;1&#xff09;這本書主要在談些什么&#xff1f;2&…

Linux下的程序調試——GDB

無論是多么優秀的程序員&#xff0c;都難以保證自己在編寫代碼時不會出現任何錯誤&#xff0c;因此調試是軟件開發過程中的一個必不可少的 組成部分。當程序完成編譯之后&#xff0c;它很可能無法正常運行&#xff0c;或者會徹底崩潰&#xff0c;或者不能實現預期的功能。此時如…

圓錐曲線萬能弦長公式_2020高考數學50條秒殺型公式與方法

考試馬上就要到了&#xff0c;學姐整理了高考數學50條秒殺型公式和方法&#xff0c;希望能幫助考生們更好地攻克數學難關&#xff01;高考數學秒殺公式與方法一1&#xff0c;適用條件&#xff1a;[直線過焦點]&#xff0c;必有ecosA(x-1)/(x1)&#xff0c;其中A為直線與焦點所在…

Python 內置模塊之 logging

日志的級別和適用情況 級別適用情況DEBUG詳細信息&#xff0c;通常只在診斷問題時對其感興趣INFO確認工作正常WARNING表示發生了意料之外的事或者在不遠的將來會有問題&#xff08;比如磁盤空間低&#xff09;。軟件依然正常工作ERROR由于一個更加嚴重的問題&#xff0c;軟件不…

Memory barrier

待續 Memory barrier,是一種屏障和一類指令&#xff0c;在執行這個屏障指令前后&#xff0c;CPU或者編譯器在內存操作上強制一個約束序列。CPU使用性能優化器可以導致執行代碼的無序。在單一線程執行中&#xff0c;重排序內存操作通常不會被注意。但是在并行編程或者設備驅動中…

數據結構與算法 Python語言描述 筆記

數據結構 線性表包括順序表和鏈表&#xff0c;python的list是順序表&#xff0c;鏈表一般在動態語言中不會使用。不過鏈表還是會出現在各種算法題中。 鏈表 link list 單鏈表 逆轉鏈表&#xff1a; leetcode 206雙鏈表循環單鏈表字符串 string 有一個重要的點就是字符串的匹配問…

Flask 跨域問題

一、什么是跨域 跨域是指&#xff1a;瀏覽器A從服務器B獲取的靜態資源&#xff0c;包括Html、Css、Js&#xff0c;然后在Js中通過Ajax訪問C服務器的靜態資源或請求。即&#xff1a;瀏覽器A從B服務器拿的資源&#xff0c;資源中想訪問服務器C的資源。 同源策略是指&#xff1a;…

Hibernate 中配置屬性詳解(hibernate.properties)

轉自&#xff1a;https://blog.csdn.net/shudaqi2010/article/details/70324843 Hibernate能在各種不同環境下工作而設計的, 因此存在著大量的配置參數。多數配置參數都 有比較直觀的默認值, 并有隨 Hibernate一同分發的配置樣例hibernate.properties 來展示各種配置選項。 所需…

1.3 使用電腦測試MC20的電話語音功能

需要準備的硬件 MC20開發板 1個https://item.taobao.com/item.htm?id562661881042GSM/GPRS天線 1根https://item.taobao.com/item.htm?id531979567261IPEX接口轉SMA接口轉接線 1根https://item.taobao.com/item.htm?id531979903836GPS有源天線 1根https://item.taobao.com/i…