• 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
  • 相关阅读:
    线性回归的从零开始实现
    比赛总结
    计数学习笔记
    DP计数问题
    多项式学习笔记
    数据结构学习笔记
    子集运算学习笔记
    待学习
    ICPC2018焦作 题解
    ICPC2018焦作 H题 Can You Solve the Harder Problem?
  • 原文地址:https://www.cnblogs.com/oxspirt/p/7242837.html
Copyright © 2020-2023  润新知