如果表达式中包含特殊字符,shell将会进行替换。例如,前面学习过的变量的使用(在双引号中使用变量)就是一种替换,转义字符也是一种替换
a=10
echo -e "value of a is a \n"
发现在mac系统下加不加-e在双引号中都会对变量进行转义替换
命令替换
命令替换的语法是 Command
注意是反引号,不是单引号,这个键位于Esc键下方
命令替换是指shell可以先执行命令,将输出结果暂时保存,在适当的地方输出。
DATE=`date`
echo "Date is $DATE"
USERS=`who|wc -l`
echo "logged in user are$USERS"
UP=`date;uptime`
echo "Uptime is $UP"
形式 | 说明 |
---|---|
${var} | 变量本来的值 |
${var:+word} | 如果变量var被定义,那么返回word,但不改变var的值 |
${var:-word} | 如果变量var为空或者已被删除(unset),那么返回word,但不改变var的值 |
${var:=word} | 如果变量var为空或者已被删除(unset),那么返回word,并将var的值设置为word |
${var:?message} | 如果变量 var 为空或已被删除(unset),那么将消息 message 送到标准错误输出,可以用来检测变量 var 是否可 以被正常赋值。若此替换出现在Shell脚本中,那么脚本将停止运行。 |
echo ${var:-"variable is not set"}
echo "1 - value of var is ${var}"
echo ${var:="variable is not setting"}
echo "2 - value of var is ${var}"
unset var
echo ${var:+"this is default value"}
echo "3 - value of var is ${var}"
var="prefix"
echo ${var:+"this is a default value"}
echo "4 - value of var is ${var}"
echo ${var:?"print this message"}
echo "5 - value of var is ${var}"