-
字符串長度:${#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:-爲空}
爲空
-