Unix / Linux - Shell Substitution
什么是 Substitution?
当 shell 遇到包含一个或多个特殊字符的表达式时,会执行 substitution。
示例
这里,变量的打印值被其实际值替换。同时,"\n" 被替换为新行 −
#!/bin/sh a=10 echo -e "Value of a is $a \n"
你将收到以下结果。这里 -e 选项启用反斜杠转义的解释。
Value of a is 10
以下是没有 -e 选项的结果 −
Value of a is 10\n
以下是可以在 echo 命令中使用的转义序列 −
| 序号 | 转义 & 描述 |
|---|---|
| 1 |
\\ 反斜杠 |
| 2 |
\a 警报 (BEL) |
| 3 |
\b 退格 |
| 4 |
\c 抑制尾随换行符 |
| 5 |
\f 换页 |
| 6 |
\n 新行 |
| 7 |
\r 回车 |
| 8 |
\t 水平制表符 |
| 9 |
\v 垂直制表符 |
你可以使用 -E 选项来禁用反斜杠转义的解释(默认)。
你可以使用 -n 选项来禁用插入新行。
Command Substitution
Command substitution 是 shell 执行一组给定命令,然后将它们的输出替换到命令位置的机制。
语法
当命令以以下形式给出时执行 command substitution −
`command`
执行 command substitution 时,请确保使用反引号,而不是单引号。
示例
Command substitution 通常用于将命令的输出赋值给变量。以下每个示例都演示了 command substitution −
#!/bin/sh 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 Thu Jul 2 03:59:57 MST 2009 Logged in user are 1 Uptime is Thu Jul 2 03:59:57 MST 2009 03:59:57 up 20 days, 14:03, 1 user, load avg: 0.13, 0.07, 0.15
Variable Substitution
Variable substitution 使 shell 程序员能够根据变量的状态来操纵其值。
以下是所有可能的 substitution 的表格 −
| 序号 | 形式 & 描述 |
|---|---|
| 1 |
${var} 替换 var 的值。 |
| 2 |
${var:-word} 如果 var 为 null 或未设置,则用 word 替换 var。var 的值不变。 |
| 3 |
${var:=word} 如果 var 为 null 或未设置,则将 var 设置为 word 的值。 |
| 4 |
${var:?message} 如果 var 为 null 或未设置,则将 message 打印到标准错误。这用于检查变量是否正确设置。 |
| 5 |
${var:+word} 如果 var 已设置,则用 word 替换 var。var 的值不变。 |
示例
以下示例展示了上述各种 substitution 的状态 −
#!/bin/sh
echo ${var:-"Variable is not set"}
echo "1 - Value of var is ${var}"
echo ${var:="Variable is not set"}
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 default value"}
echo "4 - Value of var is $var"
echo ${var:?"Print this message"}
echo "5 - Value of var is ${var}"
执行后,你将收到以下结果 −
Variable is not set 1 - Value of var is Variable is not set 2 - Value of var is Variable is not set 3 - Value of var is This is default value 4 - Value of var is Prefix Prefix 5 - Value of var is Prefix