Linux Shell 脚本:变量替换
什么是替换?
当外壳程序遇到包含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
推荐文章: