• Linux shell中的一个问题 ${}带正则匹配的表达式


    目前在准备龙芯项目的PMON,在研究其编译过程的时候,看到一些make 语句,百思不得其解。后来在shell编程中看到一点资料,牵扯到Shell中的正则表达式。故记录下来,以备后来查阅。

    问题:


    在某个makefile文件中通过include引入某个文件进来

    Include $(shell ./getname)

    而getname中的内容即为:

    pwd=$(pwd);

    if [ "${pwd#*/zloader.}" = "$pwd" ];then

    echo Makefile.cpci

    else

    echo Makefile.${pwd#*/zloader.}

    fi

    一直没看懂${pwd#*/zloader.}  这个代表什么意思,后来才知道其实得到的是Make file文件的后缀名。

    如果是pwd= /xxx/yyy/zloader.bios,那么需要得到的是Makefile.bios,其中 ${pwd#*/zloader.} = bios。其中${aaa#bbb}是一个正则表达式,而'*/ '表示pwd中路径字串中zloader前面的全部部分。

    解释:

    ${parameter#pattern}

    Substitute the value of parameter with patternremoved from the left side. The smallest portion of the contents of parametermatching pattern is removed. Shell filename substitution characters (*, ?,[...], !, and @) may be used in pattern.

    在Linux下尝试一下脚本,即可证明。

    #!/bin/sh

     

    mkdir -p zloader./xxdir

    cd zloader./xxdir

     

    pwd=$(pwd)

    echo "pwd = $pwd"

     

    echo "this will substitue pwd about the patternzloader. , into NULL"

    echo "${pwd#*/zloader.}"

     

    cd ../..

    具体的说明和理论请查看以下转载文章的章节 :${}带正则匹配的表达式


    以下是转载文章

    ----------------------------------------------------------------------------Linux Shell中的参数替换----------------------------------------------------------------------------

    Bash中的$符号的作用是参数替换,将参数名替换为参数所代表的值。对于$来说,大括号是可选的,即$A和${A}代表同一个参数。

    ${}带冒号的有下面几种表达式:

    ${parameter:-word}

    如果parameter为null或者未设置,整个参数替换表达式值为word

    ${parameter:=word}

    如果parameter为null或者未设置,整个参数替换表达式值为word,并且parameter参数值设置为word

    ${parameter:?word}

    如果parameter为null或者未设置,则打印出错误信息。否则,整个参数替换表达式值为$parameter

    ${parameter:+word}

    如果parameter不为null或者未设置,则整个参数替换表达式值为word

    ${parameter:offset}

    ${parameter:offset:length}

    parameter的值的子字符串。

    可以理解下下面这几个例子:

    Linux Shell参数替换

    ${}带!有下面几种表达式:

    ${!prefix*}

    ${!prefix@}

    将带有前缀为prefix的参数名打印出来

    ${!name[@]}

    ${!name[*]}

    这个是针对name数组的,打印出来name数组有哪些下标

    可以理解下下面这几个例子:

    Linux Shell参数替换

    ${}带正则匹配的几种表达式:

    ${parameter#word}

    ${parameter##word}

    从头开始扫描word,将匹配word正则表达的字符过滤掉

    #为最短匹配,##为最长匹配

    ${parameter%word}

    ${parameter%%word}

    从尾开始扫描word,将匹配word正则表达式的字符过滤掉

    %为最短匹配,%%为最长匹配

    可以理解下面这几个例子:

    Linux Shell参数替换

    ${parameter/pattern/string}

    ${parameter//pattern/string}

    将parameter对应值的pattern字符串替换成为string字符串

    /表示只替换一次

    //表示全部替换

    可以理解下面这几个例子:

    Linux Shell参数替换

    转载部分出处: http://www.07net01.com/linux/Linux_Shellcanshutihuan_347699_1370251380.html


  • 相关阅读:
    用C#如何创建、读取cookie
    根据拼音首字母搜索
    物理路径和相对路径 斜杠和反斜杠
    FileUpLoad导入文件类型
    JS获取FckEditor的值
    DateTime 的24小时和12小时制
    JS中Date对象getYear()方法和getFullYear()方法区别
    SQL Server 索引结构及其使用(二)
    带你学习JQuery:事件冒泡和阻止默认行为
    DropDownList 发现
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3217851.html
Copyright © 2020-2023  润新知