SHELL字符串處理技巧(${}、##、%%)


在SHELL編程中,經常要處理一些字符串變量。比如,計算長度啊、截取子串啊、字符替換啊等等,常常要用到awk、expr、sed、tr等命令。下面給大家介紹個簡單的字符串處理方法,用不着嵌套復雜的子命令。

  1. ${#VALUE}:計算VALUE字符串的字符數量。
  2. ${VALUE%.*}${VALUE%%.*}刪除VALUE字符串中以分隔符“.”匹配的右邊字符,保留左邊字符
  3. ${VALUE#*.}${VALUE##*.}刪除VALUE字符串中以分隔符“.”匹配的左邊字符,保留右邊字符
  4. ${VALUE/OLD/NEW}${VALUE//OLD/NEW}:用NEW子串替換VALUE字符串中匹配的OLD子串。

    補充:“*”表示通配符,用於匹配字符串將被刪除的字串。“.”表示字符串中分隔符,可以為任意一個或多個字符。“%”表示從左向右匹配,“#”表示從右向左匹配,“\”表示替換,都屬於非貪婪匹配,即匹配符合通配符的最短結果。與“%”、“#”和“/”類似的有“%%”、“##”和“//”,都屬於貪婪匹配,即匹配符合通配符的最長結果。

  1. ${VALUE:OFFSET}${VALUE:OFFSET:LENGTH}從VALUE字符串的左邊開始中截取子串
  2. ${VALUE:0-OFFSET}${VALUE:0-OFFSET:LENGTH}從VALUE字符串的右邊開始中截取子串

    補充:左邊第一個字符從“0”開始,右邊第一個字符從“0-1”開始。 表示偏移OFFSET個字符開始,LENGTH表示要截取字符的長度。如果沒有LENGTH變量,表示偏移OFFSET個字符開始到字符串結束。

  1. ${VALUE:-WORD}當變量未定義或者值為空時,返回值為WORD的內容,否則返回變量的值。
  2. ${VALUE:=WORD}:當變量未定義或者值為空時,返回WORD的值的同時並將WORD賦值給VALUE,否則返回變量的值。
  3. ${VALUE:+WORD}:當變量賦值時,其值才用WORD替換,否則不進行任何替換。
  4. ${VALUE:?MESSAGE}:當變量已賦值時,正常替換。否則將消息MESSAGE送到標准錯誤輸出(若此替換出現在SHELL程序中,那么該程序將終止運行)

    補充:WORD可以為一個字符串,也可以為一個變量。當為變量時,需要用“$”引用該變量。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM