參考鏈接:http://c.biancheng.net/view/1120.html
概括:
${string: start :length} 從 string 字符串的左邊第 start 個(gè)字符開始闰集,向右截取 length 個(gè)字符。
${string: start} 從 string 字符串的左邊第 start 個(gè)字符開始截取音同,直到最后痕鳍。
${string: 0-start :length} 從 string 字符串的右邊第 start 個(gè)字符開始勋眯,向右截取 length 個(gè)字符。
${string: 0-start} 從 string 字符串的右邊第 start 個(gè)字符開始截取,直到最后洛波。
${string#*chars} 從 string 字符串第一次出現(xiàn) *chars 的位置開始,截取 *chars 右邊的所有字符骚露。
${string##*chars} 從 string 字符串最后一次出現(xiàn) *chars 的位置開始蹬挤,截取 *chars 右邊的所有字符。
${string%*chars} 從 string 字符串第一次出現(xiàn) *chars 的位置開始棘幸,截取 *chars 左邊的所有字符焰扳。
${string%%*chars} 從 string 字符串最后一次出現(xiàn) *chars 的位置開始,截取 *chars 左邊的所有字符误续。
這里主要講一下#和%的使用
從截去的角度上說(shuō)吨悍,總結(jié)為:左#右%
從截取的角度上說(shuō),反過(guò)來(lái)蹋嵌。
- 使用 # 號(hào)截取右邊字符
使用#號(hào)可以截取指定字符(或者子字符串)右邊的所有字符育瓜,具體格式如下:
${string#*chars}
其中,string 表示要截取的字符欣尼,chars 是指定的字符(或者子字符串)爆雹,*
是通配符的一種停蕉,表示任意長(zhǎng)度的字符串。
*chars
連起來(lái)使用的意思是:忽略左邊的所有字符钙态,直到遇見(jiàn) chars(chars 不會(huì)被截然燮稹)。
注意册倒,以上寫法遇到第一個(gè)匹配的字符(子字符串)就結(jié)束了蚓挤。例如:
url="http://c.biancheng.net/index.html"
echo ${url#*/}
結(jié)果為/c.biancheng.net/index.html。url 字符串中有三個(gè)/驻子,輸出結(jié)果表明灿意,Shell 遇到第一個(gè)/就匹配結(jié)束了。
如果希望直到最后一個(gè)指定字符(子字符串)再匹配結(jié)束崇呵,那么可以使用##缤剧,具體格式為:
${string##*chars}
#例子
url="http://c.biancheng.net/index.html"
echo ${url#*/} #結(jié)果為 /c.biancheng.net/index.html
echo ${url##*/} #結(jié)果為 index.html
#例子2
str="---aa+++aa@@@"
echo ${str#*aa} #結(jié)果為 +++aa@@@
echo ${str##*aa} #結(jié)果為 @@@
2.使用 % 截取左邊字符
使用%號(hào)可以截取指定字符(或者子字符串)左邊的所有字符,具體格式如下:
${string%chars*}
請(qǐng)注意*
的位置域慷,因?yàn)橐厝?chars 左邊的字符荒辕,而忽略 chars 右邊的字符,所以*應(yīng)該位于 chars 的右側(cè)犹褒。其他方面%和#的用法相同抵窒,這里不再贅述,僅舉例說(shuō)明:
#!/bin/bash
url="http://c.biancheng.net/index.html"
echo ${url%/*} #結(jié)果為 http://c.biancheng.net
echo ${url%%/*} #結(jié)果為 http:
str="---aa+++aa@@@"
echo ${str%aa*} #結(jié)果為 ---aa+++
echo ${str%%aa*} #結(jié)果為 ---