无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

簡(jiǎn)單高效的Shell數(shù)組操作技巧與技術(shù)

2023-04-17 22:54 作者:小毛驢的爛筆頭  | 我要投稿

Shell Array

數(shù)組是Shell腳本中一種常用的數(shù)據(jù)結(jié)構(gòu),用于存儲(chǔ)一組數(shù)據(jù)。在Shell中,我們可以使用各種技巧來(lái)操作數(shù)組,包括數(shù)組的取值、移除數(shù)組中匹配的字符以及判斷一個(gè)值是否在數(shù)組中。下面是一些常用的Shell數(shù)組操作技巧。

數(shù)組的初始化

使用空格分隔的元素初始化數(shù)組:

#?創(chuàng)建一個(gè)名為arrayZ的數(shù)組,其中包含了6個(gè)元素。
arrayZ=(?one?two?three?four?five?five?)

使用冒號(hào)分隔的元素,并使用字符串替換進(jìn)行數(shù)組初始化:

str="a:b:c:d:e"
set?-f?#?避免通配符擴(kuò)展(*的擴(kuò)展)
arr=(${str//:/?})?
#?現(xiàn)在數(shù)組arr包含了值?'a',?'b',?'c',?'d',?'e'

使用'tr'命令將冒號(hào)替換為換行符進(jìn)行數(shù)組初始化

str="a:b:c:d:e"
arr=($(echo?$str?|?tr?':'?"\n"))
#?現(xiàn)在數(shù)組arr包含了值?'a',?'b',?'c',?'d',?'e'

使用'sed'命令將冒號(hào)替換為換行符進(jìn)行數(shù)組初始化:

str="a:b:c:d:e"
arr=($(echo?$str?|?sed?'s/:/\n/g'))
#?現(xiàn)在數(shù)組arr包含了值?'a',?'b',?'c',?'d',?'e'

使用'IFS'(內(nèi)部字段分隔符)和'eval'命令進(jìn)行數(shù)組初始化:

str="a:b:c:d:e"
IFS=':'?eval?'arr=($str)'
#?現(xiàn)在數(shù)組arr包含了值?'a',?'b',?'c',?'d',?'e'

數(shù)組的訪問(wèn)

比如有如下一個(gè)數(shù)組: arrayZ=(one two three four five five)

使用${array[@]}或${array[*]}可以獲取數(shù)組中的所有元素。

#?獲取所有元素
echo?${arrayZ[@]}???#?輸出:?one?two?three?four?five?five
echo?${arrayZ[*]}???#?輸出:?one?two?three?four?five?five

使用${array[@]:1}可以獲取數(shù)組中從第二個(gè)元素開(kāi)始的所有元素。

echo?${arrayZ[@]:1}?//two?three?four?five?

使用${array[@]:2:3}可以獲取數(shù)組中從第三個(gè)元素開(kāi)始的三個(gè)元素。

#?獲取從第三個(gè)元素開(kāi)始的三個(gè)元素
echo?${arrayZ[@]:2:3}???#?輸出:?three?four?five

使用${#array[*]}或${#array[@]}可以獲取數(shù)組中元素的個(gè)數(shù)。

#?獲取數(shù)組中元素的個(gè)數(shù)
echo?${#arrayZ[*]}???#?輸出:?6
echo?${#arrayZ[@]}???#?輸出:?6

使用${#array[0]}可以獲取數(shù)組中第一個(gè)元素的長(zhǎng)度。

#?獲取第一個(gè)元素的長(zhǎng)度
echo?${#arrayZ[0]}???#?輸出:?3

數(shù)組的操作

使用#和##、%和%%操作符來(lái)移除數(shù)組中匹配的字符

#?最短匹配和最長(zhǎng)匹配
echo?${arrayZ[@]#f*r}??#?移除匹配"four"
echo?${arrayZ[@]##t*e}?#?最長(zhǎng)匹配,移除匹配"three"

echo?${arrayZ[@]%h*e}??#?移除匹配"four"
echo?${arrayZ[@]%%t*e}?#?最長(zhǎng)匹配,移除匹配"three"

判斷一個(gè)值是否在數(shù)組中

使用 grep 命令

arrayZ=(?one?two?three?four?five?five?)

#?判斷值是否在數(shù)組中
echo?${arrayZ[@]:0}?|?grep?-o?'\bone\b'?>?/dev/null
if?[?$??-eq?0?];?then
????echo?"值在數(shù)組中"
else
????echo?"值不在數(shù)組中"
fi

上面的示例中,${arrayZ[@]:0} 用于將數(shù)組展開(kāi)為一個(gè)字符串,然后使用 grep 命令匹配值,并通過(guò) -o 參數(shù)只輸出匹配到的值。如果值在數(shù)組中,grep 命令會(huì)返回 0,否則返回非零值。通過(guò)判斷 $? 的值,可以確定值是否在數(shù)組中。

使用自定義函數(shù)

containsElement?()?{
????local?e
????for?e?in?"${@:2}";?do
????????[[?"$e"?==?"$1"?]]?&&?return?0
????done
????return?1
}

#?判斷值是否在數(shù)組中
arrayZ=(?one?two?three?four?five?five?)
containsElement?"onxxx"?"${arrayZ[@]}"
if?[?$??-eq?0?];?then
????echo?"值在數(shù)組中"
else
????echo?"值不在數(shù)組中"
fi

上面的示例中,containsElement 函數(shù)接受兩個(gè)參數(shù),第一個(gè)參數(shù)是要判斷的值,第二個(gè)參數(shù)是數(shù)組。函數(shù)通過(guò)遍歷數(shù)組中的每個(gè)元素,比較是否與要判斷的值相等,如果相等則返回 0,表示值在數(shù)組中;否則返回非零值,表示值不在數(shù)組中。


簡(jiǎn)單高效的Shell數(shù)組操作技巧與技術(shù)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
比如县| 南漳县| 丰顺县| 仙游县| 平湖市| 广昌县| 卢氏县| 舞钢市| 耒阳市| 沅江市| 怀柔区| 顺平县| 景东| 繁昌县| 西乌珠穆沁旗| 和龙市| 石狮市| 兰西县| 北辰区| 萨嘎县| 普宁市| 伊川县| 巴青县| 成安县| 小金县| 舞钢市| 三台县| 呼玛县| 崇义县| 宽甸| 雅江县| 三门县| 平山县| 平顶山市| 邵阳县| 繁峙县| 祁东县| 新田县| 木里| 旌德县| 内江市|