截取分隔符右边的字符串:
- ${var#*/} 截取左边算起第一个“/”右边的所有字符
- ${var#*/} 截取左边算起最后一个“/”右边的所有字符
截取分隔符左边的字符串:
- ${var%/*} 截取右边算起第一个“/”左边的所有字符
- ${var%%/*} 截取右边算起最后一个“/”左边的所有字符
按字符位置截取字符串:index 从0开始,负数表示从右边算起的位置
- ${var:index:number} 位置index开始number个字符
- ${var:index} 位置index开始到右边最后所有字符
# test=\'a/b/c/d\'# echo ${test#*/}b/c/d# echo ${test##*/}d# echo ${test%/*}a/b/c# echo ${test%%/*}a
使用pattern:
从右边开始匹配:
${var%pattern},
${var%%pattern}
从左边开始匹配
${var#pattern},
${var##pattern}
表示最短匹配,匹配到就停止,非贪婪
${var%pattern},
${var#pattern}
是最长匹配
${var%%pattern},
${var##pattern}
只有在pattern中使用了通配符才能有最长最短的匹配,否则没有最 长最短匹配之分
结构中的pattern支持通配符
*表示零个或多个任意字符
?表示零个或一个任意字符
[…]表示匹配中括号里面的字符
[!..]表示不匹配中括号里面的字符