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 $a abc
${VAR:=value}:如果变量为空或未被设置,那么直接返回value的值,并且将value的值赋值给VAR,否则返回变量VAR的值
[root@test ~]# a=abc [root@test ~]# echo ${a:=def} abc [root@test ~]# echo $a abc [root@test ~]# echo $b [root@test ~]# echo ${b:=def} def [root@test ~]# echo $b def
7.变量的间接引用
如果第一个变量的值恰好是第二个变量的变量名,从第一个变量引用第二个变量的值的方法,就称为间接变量引用
VAR1=VAR2
VAR2=value
bash提供了两种格式的间接变量引用方式
1)eval MYVAR=\$$VAR1==> \$VAR2
[root@test ~]# echo $a b [root@test ~]# echo $b def [root@test ~]# eval c=\$$a [root@test ~]# echo $c def
2)MYVAR=${!VAR1}
[root@test ~]# echo $a b [root@test ~]# echo $b def [root@test ~]# echo ${!a} def