一、变量的删除
使用#和%
#为从前往后检索子串进行删除
${string#substring}
从变量$string开头开始删除最短匹配$substring子串
${string##substring}
从变量$string开头开始删除最长匹配$substring子串
thorking@thorking:~$ usr=thorThorKing01king
thorking@thorking:~$ echo ${usr#thor}
ThorKing01king
thorking@thorking:~$ usr=thorkingThorKing01thorking
thorking@thorking:~$ echo ${usr}
thorkingThorKing01thorking
thorking@thorking:~$ echo ${usr#thor}
kingThorKing01thorking
thorking@thorking:~$ echo ${usr##thor}
kingThorKing01thorking
PS:鸟哥书中写的是##是要删除最长的数据,一开始不能理解何为最长的数据。
%为从后往前检索子串进行删除
${string%substring}
从变量$string结尾开始删除最短匹配$substring子串
${string%%substring}
从变量$string结尾开始删除最长匹配$substring子串
thorking@thorking:~$ echo ${usr%thor} 最后是king不会删除thor
thorkingThorKing01thorking
thorking@thorking:~$ echo ${usr%king}
thorkingThorKing01thor
thorking@thorking:~$ echo ${usr%%king}
thorkingThorKing01thor
thorking@thorking:~$ echo ${usr%o*king}
thorkingThorKing01th
thorking@thorking:~$ echo ${usr%%o*king}
th
注意:在进行#或##匹配时,$string的首字符必须是被删除子串$substring的第一个字符,不然无法匹配删除;
在进行%或者%%匹配时,$string的最后一个字符必须是被删除子串$substring的最后一个字符,不然无法进行删除操作;
二、变量的替换
使用/
${parameter/parttern/string}
用string来替换第一个匹配的pattern
${parameter/#parttern/string}
从开头匹配parameter变量中的pattern,匹配上后就用string来替换匹配的pattern
${parameter/%pattern/string}
从结尾开始匹配parameter变量中的pattern,匹配上后就用string替换匹配的pattern
${parameter//pattern/string}
用string来替换parameter变量中所有匹配的pattern
thorking@thorking:~$ echo ${usr/thor/king}
kingkingThorKing01thorking
thorking@thorking:~$ echo ${usr//thor/king}
kingkingThorKing01kingking
thorking@thorking:~$ echo ${usr/#thor/king}
kingkingThorKing01thorking
thorking@thorking:~$ echo ${usr/%thor/king} 最后是king不会匹配
thorkingThorKing01thorking
thorking@thorking:~$ echo ${usr/%king/thor}
thorkingThorKing01thorthor
thorking@thorking:~$ echo ${usr}
thorkingThorKing01thorking
发现其中有个奇怪的特例
包含最后为bin的不能用从后往前删除,即%
但是在子串中去掉bin之后就可以了,很是奇怪。。。