bash內置字符串處理工具:
1、字符串切片:
${var:offset:number} 取字符串的子串;
${var: -length} 取字符串的最右側的length個字符。注意:冒號右側必須有一個空白字符。
演示:
2、基於模式取子串:
${var#*word}:其中word是指定的分割符,功能:自左而右,查找var變量所存儲的字符串中,第一次出現的word分隔符,刪除字符串開頭至此分隔符之間(包括分隔符本身)的所有字符;
${var##*word}:其中word是指定的分隔符;功能:自左而右,查找var變量所存儲的字符串中,最后一次出現的word分隔符,刪除字符串開頭至此分隔符之間(包括分隔符本身)的所有字符;
演示:
如果是對路徑進行分割的話,最后一個例子相當於取一個絕對路徑的基名。
${var%word*}:其中word是指定的分隔符;功能:自右而左,查找var變量所存儲的字符串中,第一次出現的word分隔符,刪除此分隔符至字符串尾部之間(包括分隔符本身)的所有字符。
${var%%word*}:其中word是指定的分隔符;功能:自右而左,查找var變量所存儲的字符串中,最后一次出現的word分隔符,刪除此分隔符至字符串尾部之間(包括分隔符本身)的所有字符。
演示:
3、查找替換
${var/PATTERN/SUBSTI}:查找var所表示的字符串中,第一次被PATTERN所匹配到的字符串,將其替換為SUBSTI所表示的字符串;
${var//PATTERN/SUBSTI}:查找var所表示的字符串中,所有被PATTERN所匹配到的字符串,並將其全部替換為SUBSTI所表示的字符串;
演示:
${var/#PATTERN/SUNSTI}:查找var所表示的字符串中,行首被PATTERN所匹配到的字符串,將其替換為SUBSTI所表示的字符串;
${var/%PATTERN/SUBSTI}:查找var所表示的字符串中,行尾被PATTERN所匹配到的字符串,將其替換為SUBSTI所表示的字符串。
注意:PATTERN中要是有glob風格和通配符。
演示
支持使用glob風格的通配符
4、查找刪除
${var/PATTERN}:以PATTERN為模式從頭部自左而右開始查找var字符串中第一次被匹配之間出現的全部字符,並刪除之。
${var//PATTERN}:以PATTERN為模式從頭部自左而右開始查找var字符串中最后一次被匹配之間出現的全部字符,並刪除之
${var/#PATTERN}:以PATTERN為模式,在var字符串中匹配行首出現的PATTERN字符,並刪除之
${var/%PATTERN}:以PATTERN為模式,在var字符串中匹配行尾出現的PATTERN字符,並刪除之
演示:
5、字符大小寫轉換
${var^^}:把var中的所有小寫字符轉換為大寫
${var,,}:把var中的所有大寫字符轉換為小寫。
演示:
6、變量賦值
${var:-VALUE}:如果var變量為空,或未設置,那么返回VALUE;否則,則返回var變量的值。
${var:=VALUE}:如果var變量為空,或未設置,那么返回VALUE,並將VALUE賦值給var變量;否則,則返回var變量的值。
${var:+VALUE}:如果var變量不為空,則返回VALUE;如果var變量為空,則返回為空。
${var:?ERROR_INFO}:如果var不為空,或未設置,那么返回ERROR_INFO為錯誤提示;否則,返回var值。
演示: