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