最近总结了一下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”可以是正则表达式
转载于:https://blog.51cto.com/sunhualong/1760210