Linux Shell 脚本:变量替换 0 个改进

什么是替换?

当外壳程序遇到包含1个或多个特殊字符的命令时,执行替换。

举例

下面,echo 命令输出字符串时,遇到 "\n" 时,将其替换为回车符,新行输出。

#!/bin/sh

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

将看到如下结果输出,这里的 "-e" 使 echo 命令执行 反斜杠(\) 转义。

Value of a is 10

$

下面是无 "-e" 命令选项输出结果

$ echo "Value of a is $a \n"
Value of a is 10\n

下面是可用在 echo 命令中的转义列表:

转义符 转义描述
\ 输出反斜杠符本身
\a 警告声(BEL)
\b 回退删除1字符(backspace)
\c 阻止行尾回车
\f 换页
\n 新行
\r 回车
\t 水平制表符
\v 垂直制表符

可使用 "-E" 命令选项使反斜杠(\)转义失效(echo 命令默认行为)。

可使用 "-n" 命令选项阻止新行符的插入。

命令替换

命令替换是外壳程序的一种运行机制,它将命令替换位置上用执行的一系列命令的输出结果替换。

语法

当命令中由 ` 符号括住的字符串,表示其中是命令,语法如下:

`command`

执行命令替换,要保证执行的命令由反引号(`)括住,不是单引号(')。

举例

命令替换一般用于将命令输出作为一个变量使用。下面的例子演示了命令替换:

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

变量替换

变量替换使外壳程序可操作变量名引用存储的变量值。

如下表是所有可能的变量替换使用的情况:

形式 描述
${var} 替换 var 变量值
${var:-word} var  变量为空或未设置,word 被替换到引用 var 变量位置,但 var 并不改变。
${var:=word} var 变量为空或未设置,var  变量被赋值为 word
${var:?message} var 变量为空或未设置,message 被输出到标准错误。这用于检查变量是否被正确设置。
${var:+word} var 变量已赋值,word 被替换到引用 var 变量位置,但 var 并不改变。

举例

下面的例子演示了如上各种情况:

#!/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
本文为 Wiki 文章,邀您参与纠错、纰漏和优化
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!