shell 字符串截取方法
字符串变量使用如下:
str="hello/world/hello/shell"
1.从第几个索引开始,截取到最后
索引从0开始
echo ${str:6}
结果:world/hello/shell
2.从第几个索引开始,截取指定长度字符
索引从0开始
echo ${str:6:5}
结果:world
3.从倒数第几个位置开始,截取到最后
位置从1开始数
echo ${str: 0-5}
结果:shell
4.从倒数第几个位置开始,截取指定长度字符
位置从1开始数
echo ${str: 0-5:3}
结果:she
5.从左开始匹配第一个指定子字符串,并截取右边字符串
使用#
其中*表示通配符,/表示需要匹配的子串
echo ${str#*/}
结果: world/hello/shell
6.从左开始匹配最后一个指定子字符串,并截取右边字符串
使用##
其中*表示通配符,/表示需要匹配的子串
echo ${str##*/}
结果: shell
7.从右开始匹配第一个指定子字符串,并截取左边字符串
echo ${str%/*}
结果: hello/world/hello
8.从右开始匹配最后一个指定子字符串,并截取左边字符串
echo ${str%%/*}
结果: hello
总结
格式 | 说明 |
---|---|
${string: start :length} | 从 string 字符串的左边第 start 个字符开始,向右截取 length 个字符。(start从0开始) |
${string: start} | 从 string 字符串的左边第 start 个字符开始截取,直到最后。(start从0开始) |
${string: 0-start :length} | 从 string 字符串的右边第 start 个字符开始,向右截取 length 个字符。(start从1开始) |
${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* 左边的所有字符。 |