Unix 简明教程

Unix / Linux - Shell Substitution

What is Substitution?

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

Example

此处,变量的打印值被替换为其值。同时, "\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 命令中使用的以下转义序列 −

Sr.No.

Escape & Description

1

\\ backslash

2

\a alert (BEL)

3

\b backspace

4

*\c * suppress trailing newline

5

*\f * form feed

6

\n new line

7

\r carriage return

8

*\t * horizontal tab

9

*\v * vertical tab

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

您可以使用 -n 选项禁用插入换行符。

Command Substitution

命令替换是一种机制,通过该机制,Shell 执行一组给定的命令,然后用这些命令的输出替换命令。

Syntax

当给出命令时,执行命令替换 −

`command`

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

Example

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

#!/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

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

以下是所有可能替换操作的表格 −

Sr.No.

Form & Description

1

${var} 替换 var 的值。

2

${var:-word} 如果 var 为空或未设置,那么 word 会替换 var 。var 的值不会改变。

3

${var:=word} 如果 var 为空或未设置,那么 var 会被设置为 word 的值。

4

${var:?message} 如果 var 为空或未设置,那么消息会被打印到标准错误中。这会检查变量是否正确设置。

5

${var:+word} 如果设置了 var,则将 word 替换为 var。var 的值不会发生改变。

Example

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

#!/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