截取
从指定位置开始截取
从字符串左边开始截取
格式
例
1 2 3
| url="c.biancheng.net" echo ${url: 2: 9} biancheng
|
end 省略则截取到末尾
1 2 3
| url="c.biancheng.net" echo ${url: 2} biancheng.net
|
从右边开始截取
格式
1
| ${string: 0-start :length}
|
例
1 2 3
| url="c.biancheng.net" echo ${url: 0-13: 9} biancheng
|
end 省略
1 2 3
| url="c.biancheng.net" echo ${url: 0-13} biancheng.net
|
从指定字符(串)开始截取
使用 # 号截取右边字符
例
1 2 3
| url="http://c.biancheng.net/index.html" echo ${url#*:} //c.biancheng.net/index.html
|
注意,以上写法遇到第一个匹配的字符(子字符串)就结束了。例如
1 2 3
| url="http://c.biancheng.net/index.html" echo ${url#*/} /c.biancheng.net/index.html
|
如果希望直到最后一个指定字符(子字符串)再匹配结束,那么可以使用##,具体格式为
例
1 2 3 4 5 6 7
| #!/bin/bash url="http://c.biancheng.net/index.html" echo ${url#*/} echo ${url##*/} str="---aa+++aa@@@" echo ${str#*aa} echo ${str##*aa}
|
使用 % 截取左边字符
使用%号可以截取指定字符(或者子字符串)左边的所有字符,具体格式如下:
请注意的位置,因为要截取 chars 左边的字符,而忽略 chars 右边的字符,所以应该位于 chars 的右侧。其他方面%和#的用法相同,这里不再赘述,仅举例说明:
1 2 3 4 5 6 7
| #!/bin/bash url="http://c.biancheng.net/index.html" echo ${url%/*} echo ${url%%/*} str="---aa+++aa@@@" echo ${str%aa*} echo ${str%%aa*}
|
总结
格式 |
说明 |
${string: start :length} |
从 string 字符串的左边第 start 个字符开始,向右截取 length 个字符。 |
${string: start} |
从 string 字符串的左边第 start 个字符开始截取,直到最后。 |
${string: 0-start :length} |
从 string 字符串的右边第 start 个字符开始,向右截取 length 个字符 |
${string: 0-start} |
从 string 字符串的右边第 start 个字符开始截取,直到最后 |
${string#*chars} |
从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 右边的所有字符 |
${string##*chars} |
从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 右边的所有字符 |
${string%*chars} |
从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 左边的所有字符 |
${string%%*chars} |
从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 左边的所有字符 |
参考链接
http://c.biancheng.net/view/1120.html