前言:大家都知道不管是php,c,c++还是java这些高级语言,都会有一连串处理字符串的函数,比如c有strcpy,strlen,strstr等,可是我们在使用shell的时候,就很难发现有这杨多的字符串函数,这本身也源于shell就是一本调用各种可执行程序来处理问题的一门语言。以前在写shell的时候,操作字符串的时候我都会用cut或者是wc 来处理一些字符,比如我要计算字符串的长度,echo "bruceyang" | wc -c,这样所得的值减去1就是字符串长度,我要提取一些字符串用cut 等,但是shell 字符串变量本身也自己带了字符串的处理功能,下面我将来分享自己的总结:
${#var} | Var变量的字符长度 |
${var:position} | 从位置$position开始提取字符 |
${var:position:length} | 从位置$position开始提取$length个字符 |
${var#sub} | 从变量$string的开头, 删除最短匹配$substring的子串 |
${var##sub} | 从变量$string的开头, 删除最长匹配$substring的子串 |
${var%sub} | 从变量$string的结尾, 删除最短匹配$substring的子串 |
${var%%sub} | 从变量$string的结尾, 删除最长匹配$substring的子串 |
${var/sub/relace} | 使用$replacement, 来代替第一个匹配的$substring |
${var/#sub/relace} | 如果$string以$substring开始, 那么就用$replacement来代替匹配到的$substring |
${var/%sub/relace} | 如果$string以$substring结束, 那么就用$replacement来代替匹配到的$substring |
例子:
[root@labcd ~]# a=bruceyangbruceyang
[root@labcd ~]# echo ${#a}
18
[root@labcd ~]# echo ${a:1}
ruceyangbruceyang
[root@labcd ~]# echo ${a:1:3}
ruc
[root@labcd ~]# echo ${a#bruce}
yangbruceyang
[root@labcd ~]# echo ${a%yang}
bruceyangbruce
剩下的就等各位自行尝试吧