跳转至

10. shell子串用法

3.10 shell子串的用法

${变量}           返回变量值
${#变量}          返回变量长度
${变量:n}         返回n之后的字符
${变量:n:m}       返回n之后,m个字符
${变量#str}       从变量开头,删除最短匹配的str字符串
${变量##str}      从变量开头,删除最长匹配的str字符串
${变量%str}       从变量结尾,删除最短匹配的str
${变量%%str}      从变量结尾,删除最长匹配的str
${变量/a/str}     用str替换第一个匹配的a
${变量//a/str}    用str替换所有的a

案例

[root@151 ~]# name=chupeng
[root@151 ~]# echo ${name}
chupeng
[root@151 ~]# echo ${#name}
7
[root@151 ~]# echo ${name:3}
peng
[root@151 ~]# echo ${name:3:2}
pe

3.10.1 统计变量长度的4种方法

[root@151 ~]# echo ${#name}
7
[root@151 ~]# echo $name|wc -L
7
[root@151 ~]# expr length ${name}
7
[root@151 ~]# echo ${name} |awk '{print length($0)}'
7

3.10.2 统计命令执行的速度

1.seq命令的基本使用

[root@151 ~]# seq 3
1
2
3
[root@151 ~]# seq -s "," 3
1,2,3

2.for循环

[root@151 ~]# for i in {1..3};do str=`seq -s "---" 10`;echo $str;done
1---2---3---4---5---6---7---8---9---10
1---2---3---4---5---6---7---8---9---10
1---2---3---4---5---6---7---8---9---10

3.time函数查看命令运行时间

[root@151 ~]# time for n in {1..1000};do str=`seq -s "++++" 100`;echo ${#str} &>/dev/null;done

real    0m1.126s
user    0m0.714s
sys     0m0.379s

管道符查看字符串长度

[root@151 ~]# time for n in {1..1000};do str=`seq -s "++++" 100`;echo $str|wc -L &>/dev/null;done

real    0m2.225s
user    0m1.607s
sys     0m1.135s

length查看字符串长度

[root@151 ~]# time for n in {1..1000};do str=`seq -s "++++" 100`;expr length $str &>/dev/null;done

real    0m2.301s
user    0m1.393s
sys     0m0.947s

awk查看字符串长度

[root@151 ~]# time for n in {1..1000};do str=`seq -s "++++" 100`;echo $str|awk '{print length($0)}' &>/dev/null;done

real    0m2.356s
user    0m1.680s
sys     0m1.227s
求字符长度速度快慢结论
ubuntu@4c16g:~$ time for n in {1..1000};do str=`seq -s "++++" 100`;echo ${#str} &>/dev/null;done

real    0m1.720s
user    0m1.151s
sys     0m0.593s
ubuntu@4c16g:~$ time for n in {1..1000};do str=`seq -s "++++" 100`;echo $str|wc -L &>/dev/null;done

real    0m4.079s
user    0m2.927s
sys     0m1.575s
ubuntu@4c16g:~$ time for n in {1..1000};do str=`seq -s "++++" 100`;expr length $str &>/dev/null;done

real    0m3.100s
user    0m2.034s
sys     0m1.126s
ubuntu@4c16g:~$ time for n in {1..1000};do str=`seq -s "++++" 100`;echo $str|awk '{print length($0)}' &>/dev/null;done

real    0m4.918s
user    0m3.260s
sys     0m2.141s
## 可以看出:求字符长度速度从快到慢依次是:
    # echo ${#str}  >  expr length $str > echo $str|wc -L > echo $str|awk '{print length($0)}'

最后更新: 2022-02-20 04:00:12