溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

shell變量聲明的判斷以及字符串的操作詳解

發(fā)布時(shí)間:2021-09-18 11:40:51 來(lái)源:億速云 閱讀:188 作者:chen 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要講解了“shell變量聲明的判斷以及字符串的操作詳解”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“shell變量聲明的判斷以及字符串的操作詳解”吧!

1、shell變量聲明的判斷

表達(dá)式含義
${var}變量var的值, 與$var相同


${var-DEFAULT}如果var沒(méi)有被聲明, 那么就以$DEFAULT作為其值 *
${var:-DEFAULT}如果var沒(méi)有被聲明, 或者其值為空, 那么就以$DEFAULT作為其值 *


${var=DEFAULT}如果var沒(méi)有被聲明, 那么就以$DEFAULT作為其值 *
${var:=DEFAULT}如果var沒(méi)有被聲明, 或者其值為空, 那么就以$DEFAULT作為其值 *


${var+OTHER}如果var聲明了, 那么其值就是$OTHER, 否則就為null字符串
${var:+OTHER}如果var被設(shè)置了, 那么其值就是$OTHER, 否則就為null字符串


${var?ERR_MSG}如果var沒(méi)被聲明, 那么就打印$ERR_MSG *
${var:?ERR_MSG}如果var沒(méi)被設(shè)置, 那么就打印$ERR_MSG *


${!varprefix*}匹配之前所有以varprefix開(kāi)頭進(jìn)行聲明的變量
${!varprefix@}匹配之前所有以varprefix開(kāi)頭進(jìn)行聲明的變量

* 很簡(jiǎn)單,大家試試就明白了,不多說(shuō),注意美元符號(hào)與左花括號(hào)之間不能存在空格,左花括號(hào)不能與變量名間存在空格,變量名不能與判斷符合間有空格。

2、字符串操作(長(zhǎng)度獲取,讀取,匹配刪除,替換)

表達(dá)式含義
${#string}$string的長(zhǎng)度


${string:position}在$string中, 從位置$position開(kāi)始提取子串
${string:position:length}在$string中, 從位置$position開(kāi)始提取長(zhǎng)度為$length的子串


${string#substring}從變量$string的開(kāi)頭, 刪除最短匹配$substring的子串
${string##substring}從變量$string的開(kāi)頭, 刪除最長(zhǎng)匹配$substring的子串
${string%substring}從變量$string的結(jié)尾, 刪除最短匹配$substring的子串
${string%%substring}從變量$string的結(jié)尾, 刪除最長(zhǎng)匹配$substring的子串


${string/substring/replacement}使用$replacement, 來(lái)代替第一個(gè)匹配的$substring
${string//substring/replacement}使用$replacement, 代替所有匹配的$substring
${string/#substring/replacement}如果$string的前綴匹配$substring, 那么就用$replacement來(lái)代替匹配到的$substring
${string/%substring/replacement}如果$string的后綴匹配$substring, 那么就用$replacement來(lái)代替匹配到的$substring


* 需要說(shuō)明的是substring可以是正則表達(dá)式。

可替代命令:cut sed awk ,這三個(gè)是更為強(qiáng)大的字符串處理命令,能干關(guān)于字符串的非常多事情。這里有很多樣例介紹。

3、性能比較
time for i in $(seq 10000);do a=${#test};done;
time for i in $(seq 10000);do a=$(expr length $test);done;

代碼如下:


real 0m0.181s
user 0m0.170s
sys 0m0.000s

real 0m8.580s
user 0m2.497s
sys 0m6.075s



這里相當(dāng)于循環(huán)調(diào)用awk、sed、cut、length等外部命令處理字符串,耗時(shí)是理所當(dāng)然的。之前有篇說(shuō)過(guò)shell優(yōu)化問(wèn)題,這里不再贅述,shell循環(huán)比awk慢非常多,這里的性能測(cè)試其實(shí)不太有實(shí)際意義,具體原因結(jié)合shell優(yōu)化那篇看。

4、 字符串正則判斷
可以類(lèi)似使用如下命令:

代碼如下:


if [[ "${lastday?ERR_MSG}" =~ "^[0-9]{4,4}-[0-9]{2,2}-[0-9]{2,2}$" ]]
then
...
fi



據(jù)說(shuō)需要在bash版本3.0以上才能使用,查看bash版本方法為:bash -version ,查看當(dāng)前解釋器種類(lèi)命令:echo $0

感謝各位的閱讀,以上就是“shell變量聲明的判斷以及字符串的操作詳解”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)shell變量聲明的判斷以及字符串的操作詳解這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI