Unix/Linux Shell 替换怎么用?

文章导读
Previous Quiz Next 什么是 Substitution? 当 shell 遇到包含一个或多个特殊字符的表达式时,会执行 substitution。
📋 目录
  1. 什么是 Substitution?
  2. Command Substitution
  3. Variable Substitution
A A

Unix / Linux - Shell Substitution



Previous
Quiz
Next

什么是 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 替换 varvar 的值不变。

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