开发手册 欢迎您!
软件开发者资料库

Linux shell脚本中字符串替换

通过shell批处理程序时候,经常会涉及到字符串相关操作。有很多命令语句,如:awk,sed都可以做字符串替换操作。其实shell内置一系列特殊字符的表达式,可以实现字符串替换,本文主要介绍一下Linux shell脚本中字符串替换。

1、字符串替换

 shell 遇到包含一个或多个特殊字符的表达式时,就会执行替换。

例如,

#!/bin/bashURL="www.wonhero.com"echo -e "wonhero = $URL \n no pain no gain"

输出:

$ bash demo.sh wonhero = www.wonhero.com no pain no gain

不使用-e选项的结果:

wonhero = www.wonhero.com \n no pain no gain

\n代表是换行符,echo命令支持的转义字符如下:

\a 警示字符

\b 退格

\c 忽略输出中最后的换行符号。这个参数之后的任何字符,包括后面的参数都会被忽略掉。

\f 清除屏幕

\n 换行

\r 回车

\t 水平制表符号

\v 垂直制表符号

\\ 反斜杠字符

注意:

1)可以使用-E选项禁用转义字符(反斜杠转义),默认就是这个选项。

2)可以使用-n选项不插入换行符。

例如,

#!/bin/bashecho -n "c"echo -n "java"echo "py"

输出:

$ bash demo.sh 
wonhero

2、命令替换

命令替换是指将命令的输出结果赋值给某个变量。

用法:

variable=`commands`
variable=$(commands)

注意variable 是变量名,commands 是要执行的命令。commands 可以只有一个命令,也可以有多个命令,多个命令之间以分号;分隔。

例如,

#!/bin/bashDATE=`date`echo "Date is $DATE"USERS=`who | wc -l`echo "Logged in user are $USERS"UP=`date ; uptime`echo "Uptime is $UP"

输出:

Date is 2021年 10月 04日 星期一 20:32:44 CSTLogged in user are 3Uptime is 2021年 10月 04日 星期一 20:32:44 CST 20:32:44 up 339 days,  3:02,  3 users,  load average: 0.01, 0.04, 0.08

3、变更替换

变量替换是能够根据变量的状态来操作变量的值。如下表,

表达式

含义

${var}

变量var的值, 与$var相同

${var-DEFAULT}

如果var没有被声明, 那么就以$DEFAULT作为其值

${var:-DEFAULT}

如果var没有被声明, 或者其值为空, 那么就以$DEFAULT作为其值

${var=DEFAULT}

如果var没有被声明, 那么就以$DEFAULT作为其值

${var:=DEFAULT}

如果var没有被声明, 或者其值为空, 那么就以$DEFAULT作为其值

${var+OTHER}

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

${var:+OTHER}

如果var被设置了, 那么其值就是$OTHER, 否则就为null字符串

${var?ERR_MSG}

如果var没被声明, 那么就打印$ERR_MSG

${var:?ERR_MSG}

如果var没被设置, 那么就打印$ERR_MSG

${!varprefix*}

匹配之前所有以varprefix开头进行声明的变量

${!varprefix@}

匹配之前所有以varprefix开头进行声明的变量

例如,

#!/bin/bashecho ${var:-"wonhero"}echo "1 - c java py is ${var}"echo ${var:="wonhero"}echo "2 - c java py is ${var}"unset varecho ${var:+"wonhero"}echo "3 - c java py is $var"var="Prefix"echo ${var:+"wonhero"}echo "4 - cj ava py is $var"echo ${var:?"wonhero"}echo "5 - c java py is ${var}"

输出:

wonhero1 - c java py is wonhero2 - c java py is wonhero3 - c java py is wonhero4 - cj ava py is PrefixPrefix5 - c java py is Prefix