变量的高级用法--${var}是我们在shell 脚本中最常用到的方法,其实${ }还有很多对变量的高级用法,我们使用这些方法可以给我们在变量引用时带来很大的方便。



目录

  • 字符串处理

  • 字符串切片

  • 字符串变量赋值

  • 变量间接引用


一、字符串的处理

    ${var#*pattern}    # 从左到右,删除字符串开头至第一次出现的pattern部分 blob.png

    ${var##*pattern}    # 从左到右,删除字符串开头至最后出现pattern部分

blob.png 

    ${var%pattern*}    # 从右到左,删除字符串结尾至第一次出现pattern的部分

    ${var%%pattern*}   # 从右到左,删除字符串结尾至最后一次出现pattern的部分 

blob.png   


    ${var/pattern/substr}    # 查找var存储的字符串中,第一个被pattern匹配到的字符替换为substr

    ${var//pattern/substr}   # 查找var存储的字符串中,所有被pattern匹配到的字符替换为substr

    ${var/#pattern/substr}   # 查找var存储的字符串中,开头被pattern匹配到的字符替换为substr

    ${var/%pattern/substr}   # 查找var存储的字符串中,结尾被pattern匹配到的字符替换为substr

blob.png


    ${var/pattern/}    # 查找var存储的字符串中,删除第一次被pattern匹配到的字符

    ${var//pattern/}   # 查找var存储的字符串中,删除所有被pattern匹配到的字符

    ${var/#pattern/}   # 查找var存储的字符串中,删除开头被pattern匹配到的字符

    ${var/%pattern/}   # 查找var存储的字符串中,删除结尾被pattern匹配到的字符

blob.png


    ${var^^}    # 将var存储的字符串中的所有小写替换为大写

    ${var,,}    # 将var存储的字符串中的所有大写替换为小写,注意是英文逗号

二、字符串切片

    ${#var}        # 引用字符串的长度

    ${var:offset}  # 从左到右,引用字符串从第offset(不包括offset)个字符开始到最后的部分

    ${var:offset:number}    # 从左到右,引用字符串从第offset(不包括offset)个字符开始,长度为number的部分

    ${var: -length}        # 取字符串最右侧length个字符,注意-length前有一个空格

    ${var: -length:number}  # 先从右到左取length个字符,在从前边得到的字符中取长度为number的部分,同样的注意length前的空格    

blob.png

三、字符串变量赋值

    ${var:-value}        # var为空或未设置,则返回value;有值则返回var的值

blob.png

    ${var:+value}        # var为空或未设置,则返回空值;有值则返回value

blob.png

    ${var:=value}        # var为空或未设置,则返回value并赋值给value;有值则返回var的值

blob.png

    ${var:?error_info}   # var为空或未设置,则返回error_info的信息;有值则返回var的值

blob.png

四、变量间接引用

    如果var1=var2,var2=value,直接用变量var1引用value,这叫做变量的间接引用。

    方法一:eval tmpvar=\$$var1 ;echo ${tmpvar}

    方法二:引用${!var1}       

blob.png