1、字符串替换
shell 遇到包含一个或多个特殊字符的表达式时,就会执行替换。
例如,
#!/bin/bash
URL="www.cjavapy.com"
echo -e "cjavapy = $URL \n no pain no gain"
输出:
$ bash demo.sh cjavapy = www.cjavapy.com no pain no gain
不使用-e
选项的结果:
cjavapy = www.cjavapy.com \n no pain no gain
\n
代表是换行符,echo
命令支持的转义字符如下:
\a
警示字符
\b
退格
\c
忽略输出中最后的换行符号。这个参数之后的任何字符,包括后面的参数都会被忽略掉。
\f
清除屏幕
\n
换行
\r
回车
\t
水平制表符号
\v
垂直制表符号
\\
反斜杠字符
注意:
1)可以使用-E
选项禁用转义字符(反斜杠转义),默认就是这个选项。
2)可以使用-n
选项不插入换行符。
例如,
#!/bin/bash
echo -n "c"
echo -n "java"
echo "py"
输出:
$ bash demo.sh
cjavapy
2、命令替换
命令替换是指将命令的输出结果赋值给某个变量。
用法:
variable=`commands`
variable=$(commands)
注意:variable
是变量名,commands
是要执行的命令。commands
可以只有一个命令,也可以有多个命令,多个命令之间以分号;
分隔。
例如,
#!/bin/bash
DATE=`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 CST
Logged in user are 3
Uptime 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/bash
echo ${var:-"cjavapy"}
echo "1 - c java py is ${var}"
echo ${var:="cjavapy"}
echo "2 - c java py is ${var}"
unset var
echo ${var:+"cjavapy"}
echo "3 - c java py is $var"
var="Prefix"
echo ${var:+"cjavapy"}
echo "4 - cj ava py is $var"
echo ${var:?"cjavapy"}
echo "5 - c java py is ${var}"
输出:
cjavapy 1 - c java py is cjavapy 2 - c java py is cjavapy 3 - c java py is cjavapy 4 - cj ava py is Prefix Prefix 5 - c java py is Prefix