最近总结了一下shell中关于字符串的一些操作,希望能帮助大家更好的了解shell。在shell中也可以通过awk、sed等外部命令来操作字符串,但是调用这些外部命令处理起来与shell内置操作符的性能相差非常大,所以建议大家尽量使用内置操作符和函数来完成对字符串的操作。废话不多说,下面就来看一下shell中内置的字符串操作符和函数吧。
1、判断读取shell变量的值
表达式 | 含义 | 实例 |
${var} | 变量var的值,同$var |
[email protected]:~$ var="test" [email protected]:~$ echo ${var} test |
${var-default} | 如果var没有被声明, 那么就以default作为${var-default}的值 |
[email protected]:~$ unset var [email protected]:~$ echo ${var-default} default [email protected]:~$ echo $var [email protected]:~$ var="" [email protected]:~$ echo ${var-default} [email protected]:~$ |
${var:-default} | 如果var没有被声明, 或者其值为空, 那么就以default作为${var-default}的值 |
[email protected]:~$ unset var [email protected]:~$ echo ${var:-default} default [email protected]:~$ echo $var [email protected]:~$ var="" [email protected]:~$ echo ${var-default} default [email protected]:~$ |
${var=default} | 如果var没有被声明, 那么就以default作为${var-default}的值,同时将var赋值为default |
[email protected]:~$ unset var [email protected]:~$ echo ${var=default} default [email protected]:~$ echo $var default [email protected]:~$ var="" [email protected]:~$ echo ${var=default} [email protected]:~$ |
${var:=default} | 如果var没有被声明, 或者其值为空, 那么就以default作为${var-default}的值,同时将var赋值为default |
[email protected]:~$ var="" [email protected]:~$ echo ${var:=default} default [email protected]:~$ echo $var default [email protected]:~$ var="" [email protected]:~$ echo ${var=default} default [email protected]:~$ |
${var+default} | 如果var声明了, 那么其值就是default, 否则就为null字符串 |
[email protected]:~$ var= [email protected]:~$ echo ${var+default} default [email protected]:~$ echo ${var:+default} [email protected]:~$ echo $var [email protected]:~$ var="test" [email protected]:~$ echo ${var+default} default [email protected]:~$ echo ${var:+default} default [email protected]:~$ echo $var test |
${var:+default} | 如果var被设置了, 那么其值就是default, 否则就为null字符串 | 同上 |
${!test*} ${[email protected]} |
匹配之前所有以test开头进行声明的变量 | [email protected]:~$ test1= [email protected]:~$ test2= [email protected]:~$ test3= [email protected]:~$ echo ${[email protected]} test test1 test2 test3 [email protected]:~$ echo ${!test*} test test1 test2 test3 [email protected]:~$ |
2、字符串操作
表达式 | 定义 | 实例 |
${#var} | $var的长度 |
[email protected]:~$ var="hello" [email protected]:~$ echo ${#var} 5 [email protected]:~$ |
${var:x} | 从位置 x 开始提取子串 |
[email protected]:~$ echo ${var:2} llo |
${var:x:y} | 从位置 x 开始提取长度为 y 的子串 |
[email protected]:~$ echo ${var:2:2} ll |
${var#*str} | 从变量$var的开头, 删除最短匹配str的子串 |
[email protected]:~$ echo ${var#*l} lo |
${var##*str} | 从变量$var的开头, 删除最长匹配str的子串 | [email protected]:~$ echo ${var##*l} o |
${var%str*} | 从变量$var的结尾, 删除最短匹配str的子串 |
[email protected]:~$ echo ${var%l*} hel |
${var%%str*} | 从变量$var的结尾, 删除最长匹配str的子串 |
[email protected]:~$ echo ${var%l*} he |
${var/src/dst} | 使用dst, 来代替第一个匹配的src |
[email protected]:~$ echo ${var/l/o} heolo |
${var//src/dst} | 使用dst, 来代替所有匹配的src |
[email protected]:~$ echo ${var//l/o} heooo |
${var/#src/dst} | 如果var的前缀匹配src, 那么就用dst来代替匹配到的src |
[email protected]:~$ echo ${var/#l/a} hello [email protected]:~$ echo ${var/#h/a} aell |
${var/%src/dst} | 如果var的后缀匹配src, 那么就用dst来代替匹配到的src |
[email protected]:~$ echo ${var/%o/a} hella |
PS:“str和src”可以是正则表达式