bash变量的删除与替换

一、变量的删除

使用#和%

#为从前往后检索子串进行删除

${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之后就可以了,很是奇怪。。。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值