我们将从对脚本已经做的一些讨论但还没来得及解释的事儿暂时放一下。在这一课中我们会覆盖引用。引用被用来完成两个目标:
1.       用来控制(也就是限制)替代和
2.       用来履行单词组的角色。
我们已经使用过引用。在我们的脚本中,对我们常量的文本的分配用这个引用执行:
TITLE="System Information for $HOSTNAME"<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

RIGHT_NOW=$(date +"%x %r %Z")

TIME_STAMP="Updated on $RIGHT_NOW by $USER"

       
既然这样,文本被双重的引用字符包围。我们使用引用的原因是把单词打包放到一起。如果我们不使用引用,bash 会认为所有的第一个之后的单词都是附加的命令。试试这个:
[me@linuxbox me]$ TITLE=System Information for $HOSTNAME

单引用和双引用

Shell 识别出单和双引用字符。以下是等同的:
var="this is some text"

var='this is some text'

不管怎样,在单和双引用之间有个重要的区别。单引用限制替代。正如我们在前面的课程中所看到的,你可以将变量放在双引用文本中间然后shell仍然执行替代。我们通过echo命令可以看到这个:
[me@linuxbox me]$ echo "My host name is $HOSTNAME."
My host name is linuxbox.

如果我们改变为单引用,则变成:
[me@linuxbox me]$ echo 'My host name is $HOSTNAME.'
My host name is $HOSTNAME.
双引用不禁止以”$”开头的单词替代但是它们禁止通配符的扩张。例如,试下面这个:
[me@linuxbox me]$ echo *
[me@linuxbox me]$ echo "*"

引用一个单字符

你会遇到另一个引用字符。它是反斜线符号。反斜线符合告诉shell”忽略下一个字符。这是该例:
[me@linuxbox me]$ echo "My host name is \$HOSTNAME."
My host name is $HOSTNAME.

使用了这个反斜杠,shell忽略掉”$”符号。自从shell忽略掉它,它不会再$HOSTNAME上表现出替代。以下是一个更有用的例子:
me@linuxbox me]$ echo "My host name is \"$HOSTNAME\"."
My host name is "linuxbox".

正如你看到的,使用”\”顺序允许我们把双引号嵌入我们的文本中。
其他反斜杠技巧

如果你看着用GNU项目为任意程序写的man页面,你会注意到除了由dash和单字母组成了命令提示符选项以外,也有以两个dash开头的长选项名。例如,以下是相当的:
ls -r

ls --reverse

       
为什么它们两个都支持?短的是针对懒惰的命令行打字员并且长的形式是针对脚本的。我有时使用模糊的选项,然后我发现长的形式很有用如果我不得不写了数月后再次检查我的脚本。看见长的形式帮助我理解选项用来干什么,节省我在man页面上的路程。现在输入更多的,以后就会更少一点。懒惰将会带来维护成本。
正如你可能怀疑的,使用长形式选项能使一个单行命令变得很长。要解决这个问题,你可以使用反斜杠让shell忽略掉一个新行的字符就像这样:
ls -l \

   --reverse \

   --human-readable \

   --full-time

       
这样使用反斜杠允许我们在命令中嵌入新行。注意到这个技巧的执行,新行必须立即在反斜杠后面输入。如果你在反斜杠后放一个空格,空格会被忽略,并不是新行。反斜杠也被用来插入特殊符号到我们文本中。这些被叫做反斜杠空格字符。这儿是通常的一些:
换码符

名称

用法

\n

换行

在文本后添加空行

\t

制表符

在文本插入水平制表符

\a

闹钟

使你的电脑发出哔音

\\

反斜杠

插入一个反斜杠

\f

换页符

向打印机发送换页

 

反斜杠换码符的使用非常普遍。这个主意首先出现在C语言中。今天,shellC++, Perl, python, awk, tcl, 和许多其他编程语言使用这个概念。使用echo命令同-e选项一起将会允许我们显示。
[me@linuxbox me]$ echo -e "Inserting several blank lines\n\n\n"
Inserting several blank lines



[me@linuxbox me]$ echo -e "Words\tseparated\tby\thorizontal\ttabs."

Words separated   by  horizontal  tabs

[me@linuxbox me]$ echo -e "\aMy computer went \"beep\"."

My computer went "beep".

[me@linuxbox me]$ echo -e "DEL C:\\WIN2K\\LEGACY_OS.EXE"

DEL C:\WIN2K\LEGACY_OS.EXE