|
最近总结了一下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”可以是正则表达式
|
|
|