上一篇Linux
shell编程教程请查看:shell转义或替换介绍和用法
在本章中我们将详细讨论Shell引用机制,下面我们先从讨论元字符开始。
1、元字符Unix Shell提供了各种元字符,这些元字符在任何Shell脚本中使用时都有特殊的意义,除非使用引号否则会导致单词终止。例如?在目录中列出文件时匹配单个字符,*匹配多个字符。
这里列出了大多数shell特殊字符(也称为元字符):
* ? [ ] ' " \ $ ;
&
( ) | ^ <
> new-line space tab
可以通过在字符前面加上\来引用字符,下面的示例演示如何打印*或?。
#!/bin/bashecho AA;
BB
执行之后将收到以下结果:
Hello
./test.sh: line 2: BB: command not foundshell returned 105
现在让我们尝试使用一个引用字符:
#!/bin/bashecho AA\;
BB
以上例子将输出“AA; BB”,另外$符号是元字符之一,因此必须引用它以避免shell的特殊处理:
#!/bin/bashecho "I have \$500"
执行之后我们将得到”I have $500”的正常输出,下表列出了四种形式的引用:
编号 | 引用 & 描述 |
1 | 单引号 所有这些引号之间的特殊字符都失去了它们的特殊意义。 |
2 | 双引号 除了这些特殊的意义外,这些特殊的意义也失去了$ ` \$ \’ \” \\ |
3 | 反斜杠 任何紧跟着反斜杠的字符都失去了它的特殊意义。 |
4 | 后引号 任何位于后引号之间的内容都将被视为命令并执行。 |
echo <
-$100.**>;
(update?) [y|n]
在每个特殊字符前加上反斜杠是一件很乏味的事情,而且会使一行很难读懂:
echo \<
-\$100.\*\*\>\;
\(update\?\) \[y\|n\]
有一个简单的方法可以引用大量的字符,在字符串的开头和结尾加一个单引号(‘ )
echo '<
-$100.**>;
(update?) [y|n]'
单引号内的字符被引用,就像每个字符前面有一个反斜杠一样。这样echo命令将以适当的方式显示。
如果输出的字符串中出现了一个单引号,那么不应该将整个字符串放在单引号中,而应该在前面使用反斜杠(\),如下的例子所示:
echo 'It\'s fun
3、双引号尝试执行以下shell脚本,这个shell脚本使用单引号:
VAR=ESPANA
echo '$VAR <
-$10.**>;
[ (`date +%m/%d`) ]'
执行之后将收到以下结果
$VAR <
-$10.**>;
[ (`date +%m/%d`) ]
这不是必须展示的东西,很明显单引号防止变量替换。如果希望替换变量值并使单引号按预期工作,则需要将命令放在双引号中如下所示
VAR=ESPANA
echo "$VAR <
-$10.**>;
[ (`date +%m/%d`) ]"
执行之后将收到以下结果:
ESPANA <
-$10.**>;
[ (11/02) ]
双引号去掉了除下列字符之外的所有字符的特殊含义:
(1)$用于参数替换
(2)命令替换的反引号
(3)\$启用文字美元符号
(4)启用文字反引号
(5)启用嵌入双引号
(6)启用嵌入的反斜杠
(7)所有其他\字符都是文字字符(不特殊)
单引号内的字符被引用,就像每个字符前面有一个反斜杠一样。这有助于echo命令正确显示。
如果输出的字符串中出现了一个单引号,那么不应该将整个字符串放在单引号中,而应该在前面使用反斜杠(\),如下所示:
echo 'It\'s fun'
4、反引号在反引号之间放置任何Shell命令都将执行该命令,下面是将任何Shell命令置于反引号之间的简单语法:
var=`command`
【Linux shell编程(shell引用机制解读和用法)】在下面的示例中执行date命令,生成的结果存储在DATA变量中。
DATE=`date`echo "当前日期: $DATE"
推荐阅读
- Linux shell编程(shell转义或替换介绍和用法详解)
- Linux shell编程(shell循环语句和循环控制介绍和用法全解)
- Linux shell编程(shell基本操作符和条件语句介绍和用法)
- Linux shell编程(shell数组定义和操作详解)
- Linux shell编程(shell特殊变量完全介绍和使用教程)
- Linux shell编程(基本shell变量的定义和使用介绍)
- Linux shell编程之(什么是shell(shell脚本介绍及其操作))
- Unix和Linux信号捕获处理介绍及其相关操作教程
- Unix和Linux系统日志介绍和详细操作教程