shell中的四种模式匹配
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
shell中的四种模式匹配
POSIX为shell为进⾏模式匹配提供了四种参数替换结构(⽼版本的shell可能不⽀持),每种结构有两个参数:变量名(或变量号)及模式。
第⼀种模式:
${variable%pattern},这种模式时,shell在variable中查找,看它是否⼀给的模式pattern结尾,如果是,就从命令⾏把variable中的内容去掉右边最短的匹配模式
第⼆种模式:
${variable%%pattern},这种模式时,shell在variable中查找,看它是否⼀给的模式pattern结尾,如果是,就从命令⾏把variable中的内容去掉右边最长的匹配模式
第三种模式:
${variable#pattern} 这种模式时,shell在variable中查找,看它是否⼀给的模式pattern开始,如果是,就从命令⾏把variable中的内容去掉左边最短的匹配模式
第四种模式:
${variable##pattern} 这种模式时,shell在variable中查找,看它是否⼀给的模式pattern结尾,如果是,就从命令⾏把variable中的内容去掉右边最长的匹配模式
这四种模式中都不会改变variable的值,其中,只有在pattern中使⽤了*匹配符号时,%和%%,#和##才有区别。
[root@root shell]# var=testcase
[root@root shell]# echo $var
testcase
[root@root shell]# echo ${var%s*e} 从最右边删除最短匹配
testca
[root@root shell]# echo $var
testcase
[root@root shell]# echo ${var%%s*e} 从最右边删除最长匹配
te
[root@root shell]# echo $var 变量没有改变
testcase
[root@root shell]# echo ${var#?e} 从最左边删除最短匹配
stcase
[root@root shell]# echo $var
testcase
[root@root shell]# echo ${var#*e} 从最左边删除最短匹配
stcase
[root@root shell]# echo $var
testcase
[root@root shell]# echo ${var##*e} 从最左边删除最长匹配,即删除所有
[root@root shell]# echo $var
testcase
[root@root shell]# echo ${var##*s} 从最左边删除最长匹配
e
[root@root shell]# echo $var
testcase
[root@root shell]# echo ${var#test} 删除test
case
[root@root shell]# echo $var
testcase
[root@root shell]# echo ${var#tests} 没有匹配
testcase
[root@root shell]#
另外
var=97%
var=${var%s?}
echo $var #打印97。