Linux Shell转义字符替换、命令替换和变量替换

什么是替换

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

例子

这里,变量的打印时被替换为它的值。同时,\n被替换为换行。

#!/bin/bash

a=10
echo -e "Value of a is $a \n"

您将收到以下结果。使用-e选项可以解释反斜杠转义。

Value of a is 10

如果不-e选项,将得到以下结果:

Value of a is 10\n

以下转义字符可用于echo命令

No. 命令和描述
1 \\ 反斜杠
2 \a alert(BEL)
3 \b 退格
4 \c 禁止尾随换行
5 \f 换页
6 \n 换行
7 \r 回车
8 \t 水平制表符
9 \v 垂直制表符

您可以使用-E选项禁用反斜杠转义的解释(默认)。

您可以使用-n选项禁用新行的插入。

命令替换

命令替换是Shell执行一组给定命令然后用它们的输出替换命令的机制。

语法

当命令被给出时执行命令替换

`command`

执行命令替换时,请确保使用反引号,而不是单引号字符。

命令替换示例

命令替换通常用于将命令的输出分配给变量。以下每个示例都使用了命令替换

#!/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 Thu Oct  7 08:57:15 CST 2021
Logged in user are 1
Uptime is Thu Oct  7 08:57:15 CST 2021
08:59:24 up 124 days, 10:32,  1 user,  load average: 0.00, 0.04, 0.05

变量替换

变量替换使Shell程序员能够根据变量的状态操作变量的值。

以下是所有可能替换的下表

No. 命令和描述
1 ${var} 替换var的值。
2 ${var:-word} 如果varnull或未设置,则用word替换varvar的值不会改变。
3 ${var:=word} 如果varnull或未设置,则将var设置为word的值。
4 ${var:?message} 如果varnull或未设置,则将消息打印到标准错误。这将检查变量设置是否正确。
5 ${var:+word} 如果var已设置,word将代替varvar的值不会改变。

变量替换示例

以下是显示上述替换的各种状态的示例

#!/bin/bash

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