1.字符串切片

${#VAR}:返回字符串类型的变量VAR的长度

[root@test ~]# a=abcd[root@test ~]# echo ${#a}4

${VAR:offset}:返回字符串变量VAR中第offset个字符后面的内容,不包括第offset个字符(offset叫做偏移量)

offset的取值范围为:0-$[${#VAR}-1]

[root@test ~]# a=abcd[root@test ~]# echo ${a:2}cd

${VAR:offset:number}:返回字符串变量VAR中从第offset个字符后开始,长度为number的字符部分

[root@test ~]# a=abcd[root@test ~]# echo ${a:2:1}c

${VAR: -length}:取整个字符串最右侧的length个字符

[root@test ~]# a=abcd[root@test ~]# echo ${a: -1}d

注意:在“a:”和“-1”之间有空格


2.基于模式取字串

${VAR#*PATTERN}:自左而右,查找VAR变量所存储的字符串中,第一次被PATTNERN匹配的字符,删除从字符串开始到PATTNERN匹配的字符之间的所有字符(*号表示通配符的意思)

找到第一个匹配到的字符,然后删除当前字符和之前的所有

按照字符匹配

[root@test ~]# a=bcbcdede[root@test ~]# echo ${a#*c}bcdede

或者按照模式匹配

[root@test ~]# a=a1df[root@test ~]# echo ${a#*[[:digit:]]}df

模式可以是grep命令能够匹配的内容,以下PATTERN都是,就不一一列举了

${VAR##*PATTERN}:自左而右,查找VAR变量所存储的字符串中,所有被PATTNERN匹配的字符,删除从字符串开始到PATTNERN匹配的字符之间的所有字符

[root@test ~]# a=bcbcdede[root@test ~]# echo ${a##*c}dede

${VAR%PATTERN*}:自右而左,查找VAR变量所存储的字符串中,第一次被PATTNERN匹配的字符,删除从字符串结尾到PATTNERN匹配的字符之间的所有字符

[root@test ~]# a=bcbcdede[root@test ~]# echo ${a%e*}bcbcded

${VAR%%PATTERN*}:自右而左,查找VAR变量所存储的字符串中,所有被PATTNERN匹配的字符,删除从字符串结尾到PATTNERN匹配的字符之间的所有字符

[root@test ~]# a=bcbcdede[root@test ~]# echo ${a%%e*}bcbcd


3.查找替换

${VAR/PATTERN/SUBSTRING}:在VAR变量中查找匹配PATTNERN的内容,将其第一个匹配到的结果更换成SUBSTRING

[root@test ~]# a=2b2b2b[root@test ~]# echo ${a/[[:digit:]]/a}ab2b2b

${VAR//PATTERN/SUBSTRING}:在VAR变量中查找匹配PATTNERN的内容,将所有匹配到的结果更换成SUBSTRING

[root@test ~]# a=2b2b2b[root@test ~]# echo ${a//[[:digit:]]/a}ababab

${VAR/#PATTERN/SUBSTRING}:在VAR变量中查找行首匹配PATTNERN的内容,将匹配的结果更换成SUBSTRING

[root@test ~]# a=b2b2b2[root@test ~]# echo ${a/#[[:digit:]]/a}b2b2b2

${VAR/%PATTERN/SUBSTRING}:在VAR变量中查找行尾匹配PATTNERN的内容,将匹配的结果更换成SUBSTRING

[root@test ~]# a=b2b2b2[root@test ~]# echo ${a/%[[:digit:]]/a}b2b2ba


4.查找删除

${VAR/PATTERN}:在VAR变量中查找匹配PATTNERN的内容,将其第一个匹配到的结果删除

[root@test ~]# a=b2b2b2[root@test ~]# echo ${a/[[:digit:]]}bb2b2

${VAR//PATTERN}:在VAR变量中查找匹配PATTNERN的内容,将所有匹配到的结果删除

[root@test ~]# a=b2b2b2[root@test ~]# echo ${a//[[:digit:]]}bbb

${VAR/#PATTERN}:在VAR变量中查找匹配PATTNERN的内容,将其行首匹配到的结果删除

[root@test ~]# a=2b2b2b[root@test ~]# echo ${a/#[[:digit:]]}b2b2b

${VAR/%PATTERN}:在VAR变量中查找匹配PATTNERN的内容,将其行尾匹配到的结果删除

[root@test ~]# a=b2b2b2[root@test ~]# echo ${a/%[[:digit:]]}b2b2b


5.字符的大小写转换

${VAR^^}:将VAR变量中的所有小写字母转换为大写字母

[root@test ~]# a=abc[root@test ~]# echo ${a^^}ABC

${VAR,,}:将VAR变量中的所有大小字母转换为小写字母

[root@test ~]# a=ABC[root@test ~]# echo ${a,,}abc


6.变量赋值

${VAR:-value}:如果变量为空或未被设置,那么直接返回value的值,否则返回变量VAR的值

[root@test ~]# a=abc[root@test ~]# echo ${a:-def}abc[root@test ~]# echo ${b:-def}def

${VAR:+value}:如果变量不为空,那么直接返回value的值

[root@test ~]# a=abc[root@test ~]# echo ${a:+def}def[root@test ~]# echo ${b:+def}[root@test ~]# echo $aabc

${VAR:=value}:如果变量为空或未被设置,那么直接返回value的值,并且将value的值赋值给VAR,否则返回变量VAR的值

[root@test ~]# a=abc[root@test ~]# echo ${a:=def}abc[root@test ~]# echo $aabc[root@test ~]# echo $b[root@test ~]# echo ${b:=def}def[root@test ~]# echo $bdef


7.变量的间接引用

如果第一个变量的值恰好是第二个变量的变量名,从第一个变量引用第二个变量的值的方法,就称为间接变量引用

VAR1=VAR2

VAR2=value

bash提供了两种格式的间接变量引用方式

1)eval MYVAR=\$$VAR1==> \$VAR2

[root@test ~]# echo $ab[root@test ~]# echo $bdef[root@test ~]# eval c=\$$a[root@test ~]# echo $cdef


2)MYVAR=${!VAR1}

[root@test ~]# echo $ab[root@test ~]# echo $bdef[root@test ~]# echo ${!a}def