shell不得不知的“內建字串處理”

onephone發表於2016-11-22

總結了shell中內建的字串處理功能,包括> ${} # % :- :+ ? 等的使用
使用內建操作符處理字串時,效能較好

賦值處理

  1. ${string-word} : 如果string沒設定,則使用word作為返回值(空值和非空值不做處理)
  2. ${string:-word}: 如果string沒設定或為空值,則使用word作為返回值(非空值時不做處理) 經常使用
  3. ${string+word} : 如果string設定了(空值或非空值),則使用word作為返回值(沒有設定不做處理)
  4. ${string:+word}: 如果string為非空值,則使用word作為返回值(沒設定或空值時不做處理)
  5. ${string=word} : 如果string沒設定,則使用word作為返回值,同時將word值賦值給string
  6. ${string:=word}: 如果string沒設定或為空值,則使用word作為返回值,同時將word複製給string
  7. ${string?word} : 如果string沒有設定,則將word輸出到STDERR(空值及非空值不做處理)
  8. ${string:?word}: 如果string沒設定或為空值,則將word輸出到STDERR(非空值不做處理)

獲取字串長度

${#string} (號也稱為為number sign )

字串刪除

設定string='http://www.codeshold.me/2016/11/mac_skills.html'
1. ${string#*/} : 刪掉第一個/及其左邊的字串,返回:/www.codeshold.me/2016/11/mac_skills.html
2. ${string##*/}: 刪掉最後一個/及其左邊的字串, 返回mac_skills.html
3. ${string%/*} : 刪掉最後一個/及其右邊的字串,返回http://www.codeshold.me/2016/11
4. ${string%%/*}: 刪除第一個/及其右邊的字串,返回http:
5. 類似的有${string#*.}刪掉第一個.及其左邊的字串,${string%.*}刪掉最後一個.及其右邊的字串

記憶方法:
# 表示從左往右匹配(鍵盤上 #$ 的左邊)
% 表示從右往左匹配(鍵盤上 %$ 的右邊)
單一符號是最小匹配(非貪婪);兩個符號是最大匹配(貪婪匹配)
${變數名#substring正規表示式}從字串開頭開始配備substring,刪除匹配上的表示式
${變數名%substring正規表示式}從字串結尾開始配備substring,刪除匹配上的表示式

字串擷取

設定string=abcdefg,字串的下標從0開始
1. ${string:2} : 返回string中從第3個到結束的所有字元,即cdefg
2. ${string:0} : 返回string中從第1個到結束的所有字元,即abcdefg
3. ${string:0:5} : 返回string中從第1個開始的5個字元,即abcde
4. ${string:0-1} : 返回string中最後一個字元, 即g
4. ${string:0-3} : 返回string中從倒數第3個字元到結束的所有字元, 即efg
5. ${string:0-3:2}: 返回string中從倒數第3個字元開始的2個字元,即ef

記憶方法:
${string:開始:長度}

字串替換

設定string=/dir1/dir2/dir3
1. ${string/dir/swf} : 將第一個dir替換成swf,返回/swf1/dir2/dir3
2. ${string//dir/swf} : 將全部的dir替換成swf,返回/swf1/swf2/swf3

記憶方法:
兩個符號//表示貪婪匹配(全部替換)
${變數/查詢/替換值}查詢中出現了”/”要加轉義符”\/”表示

個人文章連結:http://codeshold.me/2016/11/shell_string.html

相關文章