-
字符串长度:${#str}
# echo ${#strs}
12
或者,awk中使用length系统函数
# awk -v strs=$strs 'END{print length(strs)}' /dev/null
12
或者,expr中使用length命令
# expr length $strs
12
或者,python中使用len属性
>>> len(strs)
12
-
求子串,特定段的字符串:${str:index:length}
求第2个字符开始步长为3:
echo ${strs:1:3}
1x1
注意:若是是反向取,如取倒数第三个开始到末尾,${strs:-(3)},不是${strs:-3}。
# echo ${strs:(-3)}
x1x
-
求子串,通用的作法
建议awk的的 substr命令来实现
substr(s, i [, n]) Returns the at most n-character substring of s starting at i. If n is omitted, the rest of s is used.(man awk)
使用的场景极少。
-
掐头去尾
掐头,去掉前边的x1x12:
echo ${strs/*12}
y2y1x1x
去尾,去掉后从12开始的全部字符:
# echo ${strs/12*}
x1x
注意:若是想明确标示去掉开头或结尾的某几个字符,则须要使用${strs/#str1}或${strs/%str1}。
# echo ${strs/#x1x/}
12y2y1x1x
[root@localhost ~]# echo ${strs/%x1x/}
x1x12y2y1
-
字符替换
与掐头去尾相似。能够使用${strs/str1/str2}或${strs//str1/str2}来完成,能够把掐头去尾看成是字符替换的特例,在这里分别表示
自左向右,替换str1为str2一次和替换全部的str1为str2。
若是明确标示匹配的方向,须要用${strs/#str1/str2}或${strs/%str1/str2}代替,分别表示 自左向右匹配后替换,自右向左匹配后替换。
[root@localhost ~]# echo ${strs/#x1x/555}
55512y2y1x1x
[root@localhost ~]# echo ${strs/%x1x/555}
x1x12y2y1555
-
是否初始化或为空:${strs-str1}或${str:-str1}
对于一个未初始化的变量,和一个值为空的变量在脚本中通常不作区分,可是不免会有极端的状况。
${strs-str1}或${str:-str1},前者表示若是变量strs未初始化,则运算结果替换为str1;后者表示若是strs变量为空时,则运算结果替换为str1。
有这样一个变量 unint
看一下这两个值:${unint:-未初始化或值为空} 和 ${unint-未初始化或值为空}
[root@localhost ~]# echo ${unint:-未初始化或值为空}
-
未初始化或值为空
[root@localhost ~]# echo ${unint-未初始化或值为空}
未初始化或值为空
如今咱们把unint换成inted,初始化它为空串
inted=""
[root@localhost ~]# echo ${inted-未初始化}
[root@localhost ~]# echo ${inted:-为空}
为空
-