• 【转】shell 编程:冒号 后面跟 等号,加号,减号,问号的意义


    原文网址:http://blog.csdn.net/trochiluses/article/details/9048539

    缺省值(:-

     

    如果变量后面跟着冒号和减号,则变量后面跟着是这个变量的缺省值。

    $ COMPANY=

    $ printf “%s/n” “${COMPANY:-Unknown Company}”

    Unknown Company

    变量的实际值可以保持不变。

    冒号也可以省略掉不用:

    $ COMPANY=

    $ printf “%s/n” “${COMPANY-Nightlight Inc.}”

    $

    指定缺省值(:=

     

    如果变量后面跟着冒号和等号,则给空变量指定一个缺省值。

    $ printf “%s/n” “${COMPANY:=Nightlight Inc.}”

    Nightlight Inc.

    $ printf “%s/n” “$COMPANY”

    Nightlight Inc.

    变量的实际值已经改变了。

    去除冒号,则不会指定缺省值。

    变量是否存在检查(:?

     

    如果变量后面跟着冒号和问号,则根据变量是否存在,显示不同的信息。信息不是必选的。

    printf “Company is %s/n” /

    “${COMPANY:?Error: Company has notbeen defined—aborting}”

    如果没有冒号则不会进行检查。

    覆盖缺省值(:+)

    如果变量后面跟着冒号和加号,则加好后面的字符串替换默认字符串。

    $ COMPANY=”Nightlight Inc.”

    $ printf “%s/n” “${COMPANY:+Company has been overridden}”

    Company has been overridden

    如果没有冒号,变量也被字符串所替换,变量本身的值不改变。

    替换部分字符串(:n

     

    如果变量后面跟着一个冒号和数字,则返回该数字开始的一个子字符串,如果后面还跟着一个冒号和数字。则第一个数字表示开始的字符,后面数字表示字符的长度。

    $ printf “%s/n” “${COMPANY:5}”

    light Inc.

    $ printf “%s/n” “${COMPANY:5:5}”

    light

    根据模板删除字串(%,#,%%,##)

     

    如果变量后面跟着井号,则返回匹配模板被删除后的字串。一个井号为最小可能性的匹配,两个井号为自大可能性的匹配。表达式返回模板右边的字符。

    $ printf “%s/n” “${COMPANY#Ni*}”

    ghtlight Inc.

    $ printf “%s/n” “${COMPANY##Ni*}”

    $ printf “%s/n” “${COMPANY##*t}”

    Inc.

    $ printf “%s/n” “${COMPANY#*t}”

    light Inc.

    使用百分号,表达式返回模板左边的字符

    $ printf “%s/n” “${COMPANY%t*}”

    Nightligh

    $ printf “%s/n” “${COMPANY%%t*}”

    Nigh

    (在我的Linux系统中上述命令不起取用)

    使用模板进行子字符串的替换(//

     

    如果变量后只有一个斜杠,则两个斜杠中间的字符串是要被替换的字符串,而第二个斜杠后面的字符串是要替换的字符串。如果变量后面跟着两个斜杠,则所有出现在两个斜杠中间的字符都要被替换为最后一个斜杠后面的字符。

    $ printf “%s/n” “${COMPANY/Inc./Incorporated}”

    Nightlight Incorporated

    $ printf “You are the I in %s” “${COMPANY//i/I}”

    You are the I in NIghtlIght Inc.

    如果模板一#号开始,则匹配以模板开始的字符,如果模板以%号结尾,则匹配以模板结尾的字符。

    $ COMPANY=”NightLight Night Lighting Inc.”

    $ printf “%s/n” “$COMPANY”

    NightLight Night Lighting Inc.

    $ printf “%s” “${COMPANY//Night/NIGHT}”

    NIGHTLight NIGHT Lighting Inc.

    $ printf “%s” “${COMPANY//#Night/NIGHT}”

    NIGHTLight Night Lighting Inc.

    (我的Linux中这个不起作用)

    如果没有指定新的值,则匹配的字符会被删除。

    $ COMPANY=”Nightlight Inc.”

    $ printf “%s/n” “${COMPANY/light}”

    Night Inc.

    也可以使用范围符号。例如:删除所有字符串中的标点符号,使用范围[:punct:]。

    $ printf “%s” “${COMPANY//[[:punct:]]}”

    Nightlight Inc

    使用星号或@符号替换变量会替换外壳脚本中所有的参数,同样,在数组中使用星号或@符号也会替换数组中的所有元素

  • 相关阅读:
    个人记录--当前年月,求当月天数和上月
    java修改图片大小
    多层iframe的页面取子标签
    oracle的游标
    json中获取key值
    iOS开发常用代码块(2)
    大话数据结构(六)——链式存储
    项目中比较有用得到js经验
    微信公众号开发——php sdk php中curl用法
    微信页面设计weui源代码(4)——Pciker微信页面中实现下拉菜单
  • 原文地址:https://www.cnblogs.com/wi100sh/p/4205909.html
Copyright © 2020-2023  润新知