Shell中的字符串操作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell中的字符串操作相关的知识,希望对你有一定的参考价值。

    最近总结了一下shell中关于字符串的一些操作,希望能帮助大家更好的了解shell。在shell中也可以通过awk、sed等外部命令来操作字符串,但是调用这些外部命令处理起来与shell内置操作符的性能相差非常大,所以建议大家尽量使用内置操作符和函数来完成对字符串的操作。废话不多说,下面就来看一下shell中内置的字符串操作符和函数吧。

1、判断读取shell变量的值  

表达式含义实例
${var}变量var的值,同$var

[email protected]:~$ var="test"

[email protected]:~$ echo ${var}

test

${var-default}如果var没有被声明, 那么就以default作为${var-default}的值 

[email protected]:~$ unset var

[email protected]:~$ echo ${var-default}

default

[email protected]:~$ echo $var


[email protected]:~$ var=""

[email protected]:~$ echo ${var-default}


[email protected]:~$

${var:-default}如果var没有被声明, 或者其值为空, 那么就以default作为${var-default}的值 

[email protected]:~$ unset var

[email protected]:~$ echo ${var:-default}

default

[email protected]:~$ echo $var


[email protected]:~$ var=""

[email protected]:~$ echo ${var-default}

default

[email protected]:~$

${var=default}如果var没有被声明, 那么就以default作为${var-default}的值,同时将var赋值为default 

[email protected]:~$ unset var

[email protected]:~$ echo ${var=default}

default

[email protected]:~$ echo $var

default

[email protected]:~$ var=""

[email protected]:~$ echo ${var=default}


[email protected]:~$

${var:=default}如果var没有被声明, 或者其值为空, 那么就以default作为${var-default}的值,同时将var赋值为default 

[email protected]:~$ var=""

[email protected]:~$ echo ${var:=default}

default

[email protected]:~$ echo $var

default

[email protected]:~$ var=""

[email protected]:~$ echo ${var=default}

default

[email protected]:~$

${var+default}如果var声明了, 那么其值就是default, 否则就为null字符串

[email protected]:~$ var=

[email protected]:~$ echo ${var+default}

default

[email protected]:~$ echo ${var:+default}


[email protected]:~$ echo $var


[email protected]:~$ var="test"

[email protected]:~$ echo ${var+default}

default

[email protected]:~$ echo ${var:+default}

default

[email protected]:~$ echo $var

test


${var:+default}如果var被设置了, 那么其值就是default, 否则就为null字符串同上

${!test*}

${[email protected]}

匹配之前所有以test开头进行声明的变量[email protected]:~$ test1=

[email protected]:~$ test2=

[email protected]:~$ test3=

[email protected]:~$ echo ${[email protected]}

test test1 test2 test3

[email protected]:~$ echo ${!test*}

test test1 test2 test3

[email protected]:~$

2、字符串操作


表达式定义实例
${#var}$var的长度

[email protected]:~$ var="hello"

[email protected]:~$ echo ${#var}

5

[email protected]:~$

${var:x}从位置 x 开始提取子串

[email protected]:~$ echo ${var:2}

llo

${var:x:y}从位置 x 开始提取长度为 y 的子串

[email protected]:~$ echo ${var:2:2}

ll

${var#*str}从变量$var的开头, 删除最匹配str的子串

[email protected]:~$ echo ${var#*l}

lo

${var##*str}从变量$var的开头, 删除最匹配str的子串[email protected]:~$ echo ${var##*l}

o

${var%str*}从变量$var的结尾, 删除最匹配str的子串

[email protected]:~$ echo ${var%l*}

hel

${var%%str*}从变量$var的结尾, 删除最匹配str的子串

[email protected]:~$ echo ${var%l*}

he

${var/src/dst}使用dst, 来代替第一个匹配的src

[email protected]:~$ echo ${var/l/o}

heolo

${var//src/dst}使用dst, 来代替所有匹配的src

[email protected]:~$ echo ${var//l/o}

heooo

${var/#src/dst}如果var的前缀匹配src, 那么就用dst来代替匹配到的src

[email protected]:~$ echo ${var/#l/a}

hello

[email protected]:~$ echo ${var/#h/a}

aell

${var/%src/dst}如果var的匹配src, 那么就用dst来代替匹配到的src

[email protected]:~$ echo ${var/%o/a}

hella

PS:“str和src”可以是正则表达式


本文出自 “IT民工” 博客,请务必保留此出处http://sunhualong.blog.51cto.com/7175959/1760210

以上是关于Shell中的字符串操作的主要内容,如果未能解决你的问题,请参考以下文章

linuxlinux shell if 多条件 并行 字符串判断

Shell 内置操作符-字符串处理(汇总)

linux shell 字符串操作(长度,查找,替换)详解

linux shell 字符串操作

怎么样判断一个变量是数字或字符 shell

shell如何判断两个含特殊字符的字符串变量是不是相等