变量替换
举个例子
从前匹配删除
var1="I like shell I like linux"
然后使用替换一个字符的模式
var2=${var1#*shell}
表示将包括“shell”以前的字符串匹配删除:
可以看到将shell以前的字符串都删除了。
再试一试匹配多个删除,这里使用like
var3=${var1##*ke}
可以看到,包括ke前的两处字符前都被删除了。
从后匹配删除
还是采用var1演示:
var1="I like shell I like linux"
使用非贪婪模式
var2=${var1%like*}
此时将后面的从后向前的第一个like后的数据删除了。
如果使用贪婪模式的话:
var3=${var1%%like*}
贪婪模式后只会剩下一个I
字符串替换
同样使用var1,现在将like换为love
var2=${var1/like/love}
这只是单个替换,多个替换为:
var2=${var1//like/love}
字符串处理
获取字符串长度:
- ${#string}
- expr length "$string" 注意,如果string有空格,必须使用双引号。
可以发现第一种的使用更加方便,而且没有空格的限制
获取子串在字符串的位置
- expr index $string $substring
其中的str为 hello shell ,可以发现,下标是从1开始的。
注意:查找的substr是讲substr拆分为一个一个的字符,匹配的第一个字符为准
比如计算子串的长度
str="hello shell"
substr="shell"
expr index "$str" "$substr"
结果为1
原因是shell会被拆为 s h e l l 这几个字符,而其中的h在str中的位置为1
获取子串的长度
expr match $string $substring
注意:匹配的时候,只会匹配到从头开始的内容,从中间匹配的会返回默认值0
如果是从中间匹配的,则会返回0
抽取子串
抽取子串
语法说明${string:position}从string的position开始${string:position:length}从position开始,长度为length${string: -position}从position左边开始${string:(position)}从position右边开始expr substr $string $position $length从position开始,长度为length
- 从position开始
- position后面的length长度
- position的左边
echo ${var: -5}
- position的右边(同上)
注意:使用expr,索引计数是从1开始的,使用${string :position}是从0开始的