国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > Linux Shell > 正文

shell字符串操作詳解

2020-07-27 19:19:35
字體:
供稿:網(wǎng)友
1、shell變量聲明的判斷

表達式含義
${var}變量var的值, 與$var相同
${var-DEFAULT}如果var沒有被聲明, 那么就以$DEFAULT作為其值 *
${var:-DEFAULT}如果var沒有被聲明, 或者其值為空, 那么就以$DEFAULT作為其值 *
${var=DEFAULT}如果var沒有被聲明, 那么就以$DEFAULT作為其值 *
${var:=DEFAULT}如果var沒有被聲明, 或者其值為空, 那么就以$DEFAULT作為其值 *
${var+OTHER}如果var聲明了, 那么其值就是$OTHER, 否則就為null字符串
${var:+OTHER}如果var被設(shè)置了, 那么其值就是$OTHER, 否則就為null字符串
${var?ERR_MSG}如果var沒被聲明, 那么就打印$ERR_MSG *
${var:?ERR_MSG}如果var沒被設(shè)置, 那么就打印$ERR_MSG *
${!varprefix*}匹配之前所有以varprefix開頭進行聲明的變量
${!varprefix@}匹配之前所有以varprefix開頭進行聲明的變量

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

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

表達式含義
${#string}$string的長度
${string:position}在$string中, 從位置$position開始提取子串
${string:position:length}在$string中, 從位置$position開始提取長度為$length的子串
${string#substring}從變量$string的開頭, 刪除最短匹配$substring的子串
${string##substring}從變量$string的開頭, 刪除最長匹配$substring的子串
${string%substring}從變量$string的結(jié)尾, 刪除最短匹配$substring的子串
${string%%substring}從變量$string的結(jié)尾, 刪除最長匹配$substring的子串
${string/substring/replacement}使用$replacement, 來代替第一個匹配的$substring
${string//substring/replacement}使用$replacement, 代替所有匹配的$substring
${string/#substring/replacement}如果$string的前綴匹配$substring, 那么就用$replacement來代替匹配到的$substring
${string/%substring/replacement}如果$string的后綴匹配$substring, 那么就用$replacement來代替匹配到的$substring

* 需要說明的是substring可以是正則表達式。

可替代命令:cut sed awk ,這三個是更為強大的字符串處理命令,能干關(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;

復(fù)制代碼 代碼如下:

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等外部命令處理字符串,耗時是理所當(dāng)然的。之前有篇說過shell優(yōu)化問題,這里不再贅述,shell循環(huán)比awk慢非常多,這里的性能測試其實不太有實際意義,具體原因結(jié)合shell優(yōu)化那篇看。

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

復(fù)制代碼 代碼如下:

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


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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 郑州市| 金寨县| 阿尔山市| 佛冈县| 厦门市| 丰镇市| 丹巴县| 渝中区| 杨浦区| 庆元县| 龙岩市| 抚州市| 广平县| 成都市| 海丰县| 开阳县| 绥化市| 浑源县| 凌海市| 大悟县| 嵩明县| 澳门| 大冶市| 延寿县| 绥芬河市| 崇仁县| 水城县| 阳山县| 安岳县| 循化| 景谷| 九台市| 饶河县| 桑日县| 云龙县| 清水河县| 上思县| 罗江县| 若尔盖县| 东莞市| 罗江县|