在SHELL編程中,常常要處理一些字符串變量。好比,計算長度啊、截取子串啊、字符替換啊等等,經常要用到awk、expr、sed、tr等命令。下面給你們介紹個簡單的字符串處理方法,用不着嵌套複雜的子命令。編程
- ${#VALUE}:計算VALUE字符串的字符數量。
- ${VALUE%.*}或${VALUE%%.*}:刪除VALUE字符串中以分隔符「.」匹配的左邊字符,保留右邊字符。
- ${VALUE#*.}或${VALUE##*.}:刪除VALUE字符串中以分隔符「.」匹配的右邊字符,保留左邊字符。
- ${VALUE/OLD/NEW}或${VALUE//OLD/NEW}:用NEW子串替換VALUE字符串中匹配的OLD子串。
補充:「*」表示通配符,用於匹配字符串將被刪除的字串。「.」表示字符串中分隔符,能夠爲任意一個或多個字符。「%」表示從右向左匹配,「#」表示從左向右匹配,「\」表示替換,都屬於非貪婪匹配,即匹配符合通配符的最短結果。與「%」、「#」和「/」相似的有「%%」、「##」和「//」,都屬於貪婪匹配,即匹配符合通配符的最長結果。字符串
- ${VALUE:OFFSET}或${VALUE:OFFSET:LENGTH}:從VALUE字符串的左邊開始中截取子串。
- ${VALUE:0-OFFSET}或${VALUE:0-OFFSET:LENGTH}:從VALUE字符串的右邊開始中截取子串。
補充:左邊第一個字符從「0」開始,右邊第一個字符從「0-1」開始。 表示偏移OFFSET個字符開始,LENGTH表示要截取字符的長度。若是沒有LENGTH變量,表示偏移OFFSET個字符開始到字符串結束。字符串處理
- ${VALUE:-WORD}:當變量未定義或者值爲空時,返回值爲WORD的內容,不然返回變量的值。
- ${VALUE:=WORD}:當變量未定義或者值爲空時,返回WORD的值的同時並將WORD賦值給VALUE,不然返回變量的值。
- ${VALUE:+WORD}:當變量已賦值時,其值才用WORD替換,不然不進行任何替換。
- ${VALUE:?MESSAGE}:當變量已賦值時,正常替換。不然將消息MESSAGE送到標準錯誤輸出(若此替換出如今SHELL程序中,那麼該程序將終止運行)。
補充:WORD能夠爲一個字符串,也能夠爲一個變量。當爲變量時,須要用「$」引用該變量。it