659441806 发表于 2018-8-28 09:13:36

Shell中的字符串操作

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

页: [1]
查看完整版本: Shell中的字符串操作