看到这个“模式”一词,你是不是想起了强大的“正则表达式”?
今天我要介绍的”bash的模式匹配”,虽然不是正则表达式,但是功能却也不俗,绝对可以让你收获颇多,
模式是可能包含任意字符的字符串(用于字符设置和范围的*,?和[])
下面,将列出bash shell模式匹配操作符:
  • ${variable#pattern}:
    如果模式匹配变量取值的开头,删除最短的匹配部分,并返回其余部分

  • ${variable##pattern}:
    如果模式匹配变量取值的开头,删除最长的匹配部分,并返回其余部分

  • ${variable%pattern}:
    如果模式匹配变量取值的结尾,删除最短的匹配部分,并返回其余部分

  • ${variable%%pattern}:
    如果模式匹配变量取值的结尾,删除最长的匹配部分,并返回其余部分

  • ${variable/pattern/string}:
    ${variable//pattern/string}:
    将variable中匹配模式的 最长部分替换为string,第一种格式中,只有第一个匹配部分会被替换,而第二种模式中,所有的匹配部分均被替换。
    如果模式以#开头,则必须匹配variable的开头,如果模式以%开头,则必须匹配variable的结尾
    如果string为null,匹配部分将被删除,如果variable为@或*,操作被依次应用于每个位置参数并且扩展为结果列表
依次举例如下:
假如path取值为/home/simaopig/demo/log.file.name,则
$(path##/*/)log.file.name
$(path#/*/)simaopig/demo/log.file.name
$path/home/simaopig/demo/log.file.name
${path%.*}/home/simaopig/demo/log.file
${path%%.*}/home/simaopig/demo/log
呵,这回我应该能记住这些了吧?嗯。