2、字符串处理
对于字符串的处理无外乎有这几种形式,如获取字符串长度、获取字符串中某一个字串的索引位置或者获取某一个字串在字符串中长度。需要注意的是如果使用的是Mac系统原生shell,它是不兼容expr length/index/match/substr这种形式,可以自己本地部署Linux虚拟系统或使用网上Bash在线工具练习。
(1)计算字符串长度
方法一:${#string},说明:获取string变量长度。
方法二:expr length "$string",说明:string有空格,则必须加双引号。
# 方法一
~ % var1="Hello World"
~ % len=${#var1}
~ % echo $len
11
# 方法二
~ % var2="I love you"
~ % len2=`expr length "$var2"`
~ % echo $len2
10
# 注意:如果使用的是Mac原生shell不兼容现在这种形式。
(2)获取子串在字符串中的索引位置
语法1:expr index $string substr,获取子串的索引位置,注意:expr这种形式索引下标都是从1开始
说明:string变量里面存在的是一个字符串,要获取string变量字符串中满足substr子串的索引位置是多少。
注意:其实在这并不是获取子字符串的位置,而是获取的是字符的索引位置,虽然指定子串但是会将子字符串进行拆分拆成一个一个字符,然后每个字符都去寻找,返回第一个找到的字符位置。
# 获取字符索引位置
var1="quickstart is a app"
ind=`expr index "$var1" start`
echo $ind
# 会先将uniq拆分个{u,n,i,q},返回最先找到其中某个字符位置
ind=`expr index "$var1" uniq`
echo $ind
# 会先将cnk拆分个{c,n,k},返回最先找到其中某个字符位置
ind=`expr index "$var1" cnk`
echo $ind
# 运行输出结果:
6
1
4
语法2: expr match $string substr,获取子串长度
注意:子串是字符串从头开始匹配的可以输出长度,如果子串为字符串中间某个位置开始会找不到。
# 获取从头开始子串长度
var1="quickStart is a app"
sub_len=`expr match "$var1" app`
echo $sub_len
sub_len=`expr match "$var1" quick`
echo $sub_len
sub_len=`expr match "$var1" quick.*`
echo $sub_len
# 运行结果
0
5
19
(3)抽取字符串中的子串
方法一:
(1)、${string:position},从string中的position开始
(2)、${string:position:length},从position开始,匹配长度为length
(3)、${string: -position},从右边开始匹配,注意负号和冒号中间有空格,或者${string:(-position)}不需要注意空格。
(4)、${string:(position)},从左边开始匹配
注意:${}这种形式的索引计数都是从0开始。
~ % var1="Quickstart is a app"
# 从左边第二个开始抽取
# ${string:position}
~ % sub_1=${var1:2}
~ % echo $sub_1
ickstart is a app
# 从左边第2个开始抽取,长度为5
# ${string:position:length}
~ % sub_2=${var1:2:5}
~ % echo $sub_2
ickst
# 从右边倒数第三个开始抽取
~ % sub_3=${var1: -3}
~ % echo $sub_3
app
# 从左边第三个开始抽取
~ % sub_5=${var1:(3)}
~ % echo $sub_5
ckstart is a app
方法二:
expr substr $string $position $length,从position开始,匹配长度为length
注意:expr这种形式索引计数都是从1开始,substr与length/index/match一样都是expr固定格式
var1="quickStart is a app"
sub=`expr substr "$var1" 5 5`
echo $sub
# 运行结果
kStar