Shell:字符串變量和索引數組變量


字符串變量

字符串就是一系列字符的組合。字符串是Shell編程中最常用的數據類型之一

格式

1.單引號格式

2.雙引號格式

3.沒有引號

image-20210511151147962

三種格式的區別

1.使用單引號 '' 的字符串:

任何字符都會原樣輸出,在其中使用變量是無效的。

image-20210511151445948

2.由雙引號" "包圍的字符串:

其中包含了變量,那么該變量會被解析得到值,而不是原樣輸出。

字符串中還可以出現雙引號的子字符串,但是需要轉義。

image-20210511151528291

3.不被引號包圍的字符串

不被引號包圍的字符串中出現變量時也會被解析,這一點和雙引號" "包圍的字符串一樣。

字符串中不能出現空格,否則空格后邊的字符串會作為其他變量或者命令解析。

image-20210511151637268

字符串長度

${#字符串變量名}

測試:

image-20210511151750256

字符串拼接

三種方式:無符號拼接;雙引號拼接;混合拼接。

無符號拼接

image-20210511152011392

雙引號拼接

image-20210511152045944

混合拼接

image-20210511152237679

字符串截取

格式 說明
${變量名:start:length} 從 string 字符串的左邊第 start 個字符開始,
向右截取 length 個字符。
${變量名:start} 從 string 字符串的左邊第 start 個字符開始截取,直到最后。
${變量名:0-start:length} 從 string 字符串的右邊第 start 個字符開始,
向右截取 length 個字符。
${變量名:0-start} 從 string 字符串的右邊第 start 個字符開始截取,直到最后。
${變量名#*chars} 從 string 字符串第一次出現 *chars 的位置開始,
截取 *chars 右邊的所有字符。
${變量名##*chars} 從 string 字符串最后一次出現 *chars 的位置開始,
截取 *chars 右邊的所有字符。
${變量名%chars*} 從 string 字符串最后第一次出現 chars* 的位置開始,
截取 chars* 左邊的所有字符。
${變量名%%chars*} 從 string 字符串第一次出現 chars* 的位置開始,
截取 chars* 左邊的所有字符

image-20210511154454881

索引數組變量

Shell支持數組(Array),數組是若干數據的集合,其中每一份數據都稱為數組中的元素。

Bash Shell只支持一維數組,不支持多維數組。

數組定義

在 Shell 中,用括號( )來表示數組,數組元素之間用空格來分隔. 語法為:

array_name=(item1  item2 ...)  # 方式1
array_name=([索引下標1]=item1  [索引下標2]=item2  ...)  # 方式2

注意,賦值號 = 兩邊不能有空格

演示

1.定義數字存儲100,3,22,58,77,17,20

nums=(29 100 13 8 91 44)

2.Shell 是弱類型的,它並不要求所有數組元素的類型必須相同

arr=(20 56 "http://www.itcast.cn/")

Shell數組元素定義后不是固定的, 定義后還可以賦值

arr[6]=100

3.可以給指定元素賦值初始化

arr2=([0]=1 [2]=100 [4]=aa)

由於上面只賦值了3個元素, 所以數組的長度是3

數組的獲取

1.通過下標獲取元素值,index從0開始

${arr[index]}

注意使用{ }

2.獲取值同時復制給其他變量

item=${arr[index]}

3.使用 @* 可以獲取數組中的所有元素

${arr[@]}
${arr[*]}

4.獲取數組的長度或個數

${#arr[@]}
${#arr[*]}

5.獲取數組指定元素的字符程度

${#arr[索引]}

數組的拼接

所謂 Shell 數組拼接(數組合並),就是將兩個數組連接成一個數組

使用 @* 獲取數組所有元素之后進行拼接

array_new=(${array1[@]} ${array2[@]} ...)
array_new=(${array1[*]} ${array2[*]} ...)

數組的刪除

刪除數組指定元素數據和刪除整個數組數據

刪除數組指定元素數據

unset array_name[index]

刪除整個數組

unset array_name


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM