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”可以是正则表达式


你可能感兴趣的:(linux,shell,String)