• shell脚本中${...}函数的用法总结


    ${...}在字符串中有非常多的用法:

    1、${var}

    限定变量。

    如果一个变量名A是另一个变量名AB的前部分,那么,如果要在AB相连时,要得到A的值,就必须使用${var}限定。

    如果变量名不会产生歧义时(即独立的变量名),${var}与$var没有任何区别。

    var="hello"

    var_01="hello01"

    echo  $var $var_01 ${var}_01

    >>> hello hello01 hello_01

    2、${#var}

    得到变量var的长度

    var="hello"

    echo ${#var}

    >>> 5

    3、${var#}

    删除变量首部的字符(串),

    "#"后面的可以是字面串,也可以是正则表达式(惰性匹配)。

    var="hello"

    echo ${var#he}

    >>> llo

    var="/res_pos/path/from/something"

    echo ${var#/}

    >>> res_pos/path/from/something    # 删除第一个"/"

    echo ${var#/*/}

    >>> path/from/something   # 删除首部匹配"/*/"的串,即"/res_pos/"

    4、${var##}

    删除变量首部的字符(串),

    只是,当使用2个"##"时,匹配是贪婪的(贪婪匹配,也就是尽可能多的匹配)。

    echo ${var##/*/}

    >>> something  # 删除首部匹配"/*/"的串,即"/res_pos/path/from/"。

    5、${var%}

    删除变量尾部的字符(串),

    "%"后面的可以是字面串,也可以是正则表达式(惰性匹配)。

    var="hello"

    echo ${var%llo}

    >>> he

    var="~/res_pos/path/from/something"

    echo ${var%/*}

    >>> ~/res_pos/path/from    # 删除尾部的"/something"

    6、${var%%}

    删除变量尾部的字符(串),

    只是,当使用2个"%%"时,匹配是贪婪的(对应于第4条)

    var="~/res_pos/path/from/something"

    echo ${var%/*}

    >>> ~    # 删除第一个的"/"后的所有所有内容(包括"/"),贪婪匹配中,"/*"就是"/"后的所有字符串

    7、${var::}

    跟python的切片概念相似,取变量var的起始索引,

    指定长度的子串(${var:索引:长度})。

    var="~/res_pos/path/from/something"

    echo ${var:0:5}

    >>> ~/res

    echo ${var:1:5}

    >>> /res_      # 可见,字符串的索引是从0开始的

    echo ${var::5}

    >>> ~/res      # 省略"索引",默认为从0开始

    echo ${var:1:}

    >>>               # 省略"长度",默认长度为0,所以输出为空

    8、${var//}

    字符串替换。

    将var中的字符串A替换成字符串B(${var/A/B})。

    var="hello world"

    echo ${var/hello/hi}

    >>> hi world      # 字符串"hello"替换成了"hi"

    echo ${var/l/X}

    >>> heXlo world  # 第一个"l"替换成了"X"

    9、${var///}

    字符串替换,

    与第8点相同,只不过,现在是将所有出现的串A替换成串B(${var//A/B})。

    var="hello world"

    echo ${var//l/X}

    >>> heXXo worXd  # 所有的"l"都替换成了"X"


    10、${var/#/}

    替换字符串首部的串A为串B,

    (${var/#A/B}),与第8点不同的是,这里只替换首部的串A。

    var="hello world. hello baby."

    echo ${var//h/H}

    >>> Hello world. Hello baby.    # 将所有"h"替换成了"H"

    echo ${var/#h/H}

    >>> Hello world. hello baby.    # 将首部的"h"替换成了"H"

    echo ${var/e/E}

    >>> hEllo world. hello baby.    # 将第一个出现的"e"替换成了"E"

    echo ${var/#e/E}

    >>> hello world. hello baby.    # 首字符不是"e",所以没有进行任何替换,原样输出。

    11、${var/%/}

    替换字符串尾部的串A为串B,

    (${var/%A/B}),与第10点相似,只是这是处理的是字符串尾。

    var="hello hello"

    echo ${var/%o/END}

    >>> hello hellEND    # 将尾部的字符"o",替换成了"END"。
    ————————————————
    版权声明:本文为CSDN博主「李老客儿」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/lihonghai2392/article/details/77868445

  • 相关阅读:
    html表格,table标签
    2-3VRP的基本配置
    6 sys模块
    3 datetime模块
    2 time模块
    1 模块和包的介绍
    12 函数进阶---生成器
    13 函数进阶---迭代器
    10 函数进阶---闭包
    11 函数进阶---装饰器
  • 原文地址:https://www.cnblogs.com/fengliu-/p/11674344.html
Copyright © 2020-2023  润新知