本文参考文章:https://www.geek-share.com/detail/2621356402.html
#{…}、${#…}由一些特殊符号组成的表达式和expr都可以进行字符串的一部分处理。
expr引出通用求值表达式,可以实现算术操作、比较操作、字符串操作和逻辑操作等功能。
(1)计算字符串长度
字符串名为string,可以使用命令${#string}或expr length $string两种方法来计算字符串的长度。若string包括空格,需用双引号引起来(expr length后面只能跟一个参数,string有空格会当作多个参数处理)。
注意:expr length \”$string\”一定要加引号,否则会报错。
(2)子串匹配索引
expr的索引命令格式为:expr index $string $substring(子串),在字符串$string上匹配$substring中字符第一次出现的位置,匹配不到,expr index返回0。
\”wo\”在字符串string中虽然出现在第7,但还是返回o首次出现的位置5。(看起来,匹配substring中任意一个字符在string中第一次出现的索引)
(3)子串匹配的长度
expr match $string $substring,在string的开头匹配substring字符串,返回匹配到的substring字符串的长度,若string开头匹配不到则返回0,其中substring可以是字符串也可以是正则表达式。
\”world\”尽管在string中出现,但是未出现在string的开头处,因此返回0。
(4)抽取子串
Bash Shell提供两种命令#{…}和expr实现抽取子串功能。
expr substr
expr substr也能够实现抽取子串功能,命令格式:expr substr $string $position $length,与#{…}最大不同是expr substr命令从1开始进行标号。
接着使用正则表达式抽取子串的命令,但只能抽取string开头处或结尾处的子串。
抽取字符串开头处的子串:
格式一:expr match $string \’$substring$substring\’。
格式二:expr $string : \’$substring$substring\’,其中冒号前后都有一个空格,并且没有match关键字。
抽取字符串结尾处的子串:
格式一:expr match $string \’.*$substring$substring\’。
格式二:expr $string : \’.*$substring$substring\’。.*表示任意字符的任意重复,抽取的值是()中的那部分字符,(…)中一个点表示一个字符,几个点就表示从尾部取几个字符。
#{…}
其中#{…}有两种格式。
格式一:#{string:position}从名称为$string的字符串的第$position个位置开始抽取子串,从0开始标号。
格式二:#{string:position:length}增加$length变量,表示从$string字符串的第$position个位置开始抽取长度为$length的子串。
#{…}还提供了从string右边开始计数抽取子串的功能。
格式一:#{string: -position},冒号与横杠间有一个空格。
格式二:#{string:(position)}
(5)删除子串
删除字串是指将原字符串中符合条件的子串删除,命令只有${…}格式。
从string开头处删除子串:
格式一:${string#substring},删除开头处与substring匹配的最短子串。
格式二:${string##substring},删除开头处与substring匹配的最长子串。其中substring并非是正则表达式而是通配符。
从string结尾处开始删除:
格式一:${string%substring},删除结尾处与substring匹配的最短子串。
格式二:${string%%substring}删除结尾处与substring匹配的最长子串。与上述命令仅在#和%之间不同。
(6)替换子串
替换子串命令都是${…},可以在任意处、开头处、结尾处替换满足条件的子串。其中的substring都不是正则表达式而是通配符。
在任意处替换子串命令:
格式一:${string/substring/replacement},仅替换第一次与substring相匹配的子串。
格式二:${string//substring/replacement},替换所有与substring相匹配的子串。
在开头处替换与substring相匹配的子串,格式为:${string/#substring/replacement}。
在结尾除替换与substring相匹配的子串,格式为:${string/%substring/replacement}。