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