[toc]
shell变量子串
1.返回变量
${var}	返回变量var的内容
$ a=10
$ echo ${a}
10
2.返回字符长度
${#var}	返回变量var的长度,按照字符
a=10
$ echo ${#a}
2
3.截取子串
${var:n}	在变量var中,从位置n(n为数字)之后开始提取子串到结尾
$ a="i am boy"
$ echo ${a:3}
m boy
${var:n:length}	在变量var中,从位置n之后开始提取长度为length的子串
$ a="i am boy"
$ echo ${a:3:3}
m b
4.删除子串
4.1 从开头删除
4.1.1 最短匹配
${var#word}	从变量var开头开始删除最短匹配的word子串
$ a=abc123ABCabc123ABC
$ echo ${a#a*b}
c123ABCabc123ABC		#匹配了ab,最短匹配
$ echo ${a#a*C}
abc123ABC				#匹配了abc123ABC
4.1.2 最长匹配
${var##word}	从变量var开头开始删除最长匹配的word子串
$ a=abc123ABCabc123ABC
$ echo ${a##a*b}
c123ABC			#匹配了abc123ABCab,最长匹配
$ echo ${a##a*C}
						#全部匹配,全部删除
4.2 从结尾删除
4.2.1 最短匹配
${var%word}	从变量var结尾开始删除最短匹配的word子串
$ a=abc123ABCabc123ABC
$ echo ${a%1*C}
abc123ABCabc			#从结尾开始匹配了123ABC
4.2.2 最长匹配
${var%%word}	从变量var结尾开始删除最长匹配的word子串
$ a=abc123ABCabc123ABC
$ echo ${a%%1*C}
abc						#从结尾匹配了123ABCabc123ABC
5.替换子串
${var/A/B}	用B代替第一个匹配的A
$ a=abc111
$ echo ${a/1/9}
abc911		
${var//A/B}	用B代替所有匹配的A
$ a=abc111
$ echo ${a//1/9}
abc999
6.特殊扩展变量
6.1 ${var:-word}
${var:-word} ,冒号可以忽略	如果var的变量值为空或为未赋值,则会返回word字符串并替代变量的值
$ echo $C
							#变量C没有赋值,所以为空
$ B=${C:-hehe}			#如果C没有赋值,则将hehe赋值给B
$ echo $B
hehe						
$ A=abc		
$ B=${A:-haha}			#因为变量A有值,所以将变量A的值赋予B
$ echo $B
abc
#冒号可以不写
$ echo $D
$ E=${D-hehe}
$ echo $E
hehe
6.2 ${var:=word}
${var:=word},冒号可以忽略	如果var的变量值为空或未赋值,则设置这个变量值为word,并返回其值
$ echo $A
							#变量A没有赋值
$ B=${A=hehe}			#如果变量A为空或未赋值,则设置变量A的值为hehe
$ echo $A
hehe							#与var-word不同,变量A也会有值
$ echo $B
hehe
6.3 ${var:?word}
${var:?word} ,冒号可以忽略	如果var的变量值为空或未赋值,那么word字符串将被作为标准错误输出,否则输出变量的值
$ echo $A		
							#变量A为空或未赋值
$ echo ${A?hehe}
-bash: A: hehe			#将hehe作为标准错误输出
$ A=abc
$ echo ${A?hehe}
abc							#因为变量A有值,所以输出变量A的值
6.4 ${var:+word}
${vrt:+word} ,冒号可以忽略	如果var变量值为空或未赋值,则什么都不做,否则word字符串将替代变量的值
$ echo $A
							#变量A为空或未赋值
$ echo ${A+hehe}
							#不做任何操作
										
$ A=abc
$ echo ${A+hehe}	
hehe							#因为变量A有值,所以用hehe替代变量A的值

