shell腳本中${...}函數的用法總結

${...}在字符串中有很是多的用法:python

一、${var}正則表達式

限定變量。.net

若是一個變量名A是另外一個變量名AB的前部分,那麼,若是要在AB相連時,要獲得A的值,就必須使用${var}限定。blog

若是變量名不會產生歧義時(即獨立的變量名),${var}與$var沒有任何區別。索引

var="hello"字符串

var_01="hello01"變量

echo  $var $var_01 ${var}_01協議

>>> hello hello01 hello_01字符

 

二、${#var}path

獲得變量var的長度

var="hello"

echo ${#var}

>>> 5

 

三、${var#}

刪除變量首部的字符(串),

"#"後面的能夠是字面串,也能夠是正則表達式(惰性匹配)。

var="hello"

echo ${var#he}

>>> llo

var="/res_pos/path/from/something"

echo ${var#/}

>>> res_pos/path/from/something    # 刪除第一個"/"

echo ${var#/*/}

>>> path/from/something   # 刪除首部匹配"/*/"的串,即"/res_pos/"

 

四、${var##}

刪除變量首部的字符(串),

只是,當使用2個"##"時,匹配是貪婪的(貪婪匹配,也就是儘量多的匹配)。

echo ${var##/*/}

>>> something  # 刪除首部匹配"/*/"的串,即"/res_pos/path/from/"。

 

五、${var%}

刪除變量尾部的字符(串),

"%"後面的能夠是字面串,也能夠是正則表達式(惰性匹配)。

var="hello"

echo ${var%llo}

>>> he

var="~/res_pos/path/from/something"

echo ${var%/*}

>>> ~/res_pos/path/from    # 刪除尾部的"/something"

 

六、${var%%}

刪除變量尾部的字符(串),

只是,當使用2個"%%"時,匹配是貪婪的(對應於第4條)

var="~/res_pos/path/from/something"

echo ${var%/*}

>>> ~    # 刪除第一個的"/"後的全部全部內容(包括"/"),貪婪匹配中,"/*"就是"/"後的全部字符串

 

七、${var::}

跟python的切片概念類似,取變量var的起始索引,

指定長度的子串(${var:索引:長度})。

var="~/res_pos/path/from/something"

echo ${var:0:5}

>>> ~/res

echo ${var:1:5}

>>> /res_      # 可見,字符串的索引是從0開始的

echo ${var::5}

>>> ~/res      # 省略"索引",默認爲從0開始

echo ${var:1:}

>>>               # 省略"長度",默認長度爲0,因此輸出爲空

 

八、${var//}

字符串替換。

將var中的字符串A替換成字符串B(${var/A/B})。

var="hello world"

echo ${var/hello/hi}

>>> hi world      # 字符串"hello"替換成了"hi"

echo ${var/l/X}

>>> heXlo world  # 第一個"l"替換成了"X"

 

九、${var///}

字符串替換,

與第8點相同,只不過,如今是將全部出現的串A替換成串B(${var//A/B})。

var="hello world"

echo ${var//l/X}

>>> heXXo worXd  # 全部的"l"都替換成了"X"


十、${var/#/}

替換字符串首部的串A爲串B,

(${var/#A/B}),與第8點不一樣的是,這裏只替換首部的串A。

var="hello world. hello baby."

echo ${var//h/H}

>>> Hello world. Hello baby.    # 將全部"h"替換成了"H"

echo ${var/#h/H}

>>> Hello world. hello baby.    # 將首部的"h"替換成了"H"

echo ${var/e/E}

>>> hEllo world. hello baby.    # 將第一個出現的"e"替換成了"E"

echo ${var/#e/E}

>>> hello world. hello baby.    # 首字符不是"e",因此沒有進行任何替換,原樣輸出。

 

十一、${var/%/}

替換字符串尾部的串A爲串B,

(${var/%A/B}),與第10點類似,只是這是處理的是字符串尾。

var="hello hello"

echo ${var/%o/END}

>>> hello hellEND    # 將尾部的字符"o",替換成了"END"。————————————————版權聲明:本文爲CSDN博主「李老客兒」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連接及本聲明。原文連接:https://blog.csdn.net/lihonghai2392/article/details/77868445

相關文章
相關標籤/搜索