字符串切片

${var:offset:number}

取字符串的最右侧几个字符:

${var: -length} 注意: 冒号后必须有一个空白字符
#!/bin/bash
var="chengkaihua"
echo $var
# 显示字符串右侧偏移两个字符取三个字符
echo ${var:2:3} # eng
echo ${var: -3} # hua

基于模式取子串:
${var#*word}: 其中word可以是指定的任意字符;功能:自左向右,查找var变量所存储的字符串中第一次出现的word,

删除字符串开头至第一次出现word字符之间的所有字符
${var##*word}:同上,不过删除的是字符串开头至最后一次由word指定的字符之间的所有内容

${var%word*}:其中word可以是指定的任意字符,功能:自右向左,查找var变量所存储的字符串中第一次出现的word,
删除字符串最后一个字符向左至第一次出现word字符之间的所有字符
${var%%word*}:同上,只不过删除字符串最右侧的字符向左至最后一次出现word字符之间的所有字符

示例: url=http://www.magedu.com:80
${url##*:}
${url%%:*}

查找替换:
${var/pattern/substi}: 查找var所表示的字符串中,第一次被pattern所匹配到的字符串,以substi替换之
${var//pattern/substi}: 查找var所表示的字符串中,所有能被pattern所匹配到的字符串,以substi替换之

查找并删除:
${var/pattern}: 查找var所表示的字符串中,删除第一次被pattern所匹配到的字符串
${var//pattern}:
${/var/#pattern}:
${var/%pattern}:

字符大小写转换:
${var^^}: 把var中的所有小写字母转换为大写
${var,,}: 把var中的所有大写字母转换为小写

变量赋值:
${var:-value}: 如果var为空或未设置,那么返回value;否则,则返回var的值
${var:=value}: 如果var为空或未设置,那么返回value,并将value赋值给var;否则,则返回var的值

${var:+value}: 如果var不空,则返回value
${var:?error_info}: 如果var为空或未设置,那就返回error_info;否则,则返回var的值

    #!/bin/bash
                    var="chengkaihua"
                    echo $var
                    # 显示字符串右侧偏移两个字符取三个字符
                    echo ${var:2:3} # eng
                    echo ${var: -3} # hua
                    echo ${var#*a}  # ihua
                    echo ${var##*a} #
                    echo ${var%a*}  # chengkaihu
                    echo ${var%%a*} # chengk

                    echo ${var^^}   # 小写字母转换为大写
                    echo ${var,,}   # 大写字母转换为小写

                    echo ${name:-alen} # alen
                    echo $name      #
                    echo ${name:=alen} # alen
                    echo $name      # alen

                    echo ${name1:?"name1为空或未设置"}
04-02 14:24