shell学习笔记四--引用
这一篇我们主要讨论shell中的引用,本篇内容不多,之所有要单独篇幅来讨论是因为它很重要而且相对比较独立。我们要介绍的引用方法包括以下内容:单引号’双引号”反斜杠\反引号`命令引用$( )一、单引号我们前面介绍了变量,还介绍了文件名替换中的特殊符号*和命令行中空格的意义。如果变量或者命令行中出现了shell特殊字符,应该怎么处理呢?还是举例子吧:$ cat phonebookAliceChebba 973-555-2015Barbara Swingle201-555-9257Billy Bach 201-555-7618LizStachiw 212-555-2298SusanGoldberg201-555-7776SusanTopple 212-555-4932TonyIannino 973-555-1295$ grep Susan phonebookSusanGoldberg201-555-7776SusanTopple 212-555-4932$我们知道,grep可以知道含有特定模式的行,这里找出了显示了包含字符Susan的行,结果有2行。如果我们想精确查找Susan Goldberg所在的行呢?$ grep Susan Goldberg phonebookgrep: Goldberg:No such file or directoryphonebook:SusanGoldberg 201-555-7776phonebook:SusanTopple212-555-4932$可以看到,shell先抛出了一个错误,然后显示了包含Susan的行,而且前面还有文件名,这一系列的结果似乎并不在我们的意料之内。我们先来回顾一下grep的语法规则:grep patternfile(s)按照这个规则,我们不难理解shell在想些什么:命令行grep SusanGoldberg phonebook中,Susan是模式pattern,而Goldberg和phonebook都是文件名(shell这么理解的)。所以shell会告诉我们grep: Goldberg: No such file ordirectory(文件或目录不存在)。尽管shell判断文件Goldber不存在,它依然认为我们给了它两个文件名,所以结果出现的文件名phonebook就在情理中了。回到我们的问题,精确查找Susan Goldberg所在的行。我们需要把Susan Goldberg(包作为pattern给grep处理,包括之间的空格。这时我们需要去除空格在shell中特殊意义(还记得吗,空格是命令行参数分隔符之一),单引号可以帮我们解决这个问题:$ grep 'Susan Goldberg' phonebookSusanGoldberg201-555-7776$这次我们得到了想要的结果,shell去掉了空格的特殊意义,把SusanGoldberg当作pattern来处理了。单引号的作用就是屏蔽shell中特殊字符的意义,使他们变成普通字符。成对的单引号可以屏蔽所有字符,甚至是换行符。还是继续看例子:$ file=/home/steve/bin/prog1$ echo $file/home/steve/bin/prog1$ echo ‘$file’$file$使用单引号引用$file时,shell原封不动的显示了它们。这时符号$的变量替换意义被屏蔽了。$ echo *1.bak2.bak3.bakurfile$ echo ‘*’*$使用单引号引用*时,shell原封不动的显示了*。这时符号*的文件名替换意义被屏蔽了。当使用单引号对时,我们甚至不需要知道什么符号有特殊意义。二、双引号双引号和单引号的作用差不多,区别在于双引号没有那么严格。单引号告诉shell屏蔽所有字符的特殊意义,而双引号只要求忽略大多数。具体地说,括在双引号中的以下三种字符不被屏蔽:美元符号$反斜杠\反引号`不屏蔽美元符号的特殊意义,意味着在双引号内部也进行变量名替换。$echo “$file”/home/steve/bin/prog1$变量file的值被显示了出来。$ x=*$ echo $x1.bak2.bak3.bakurfile$ echo “$x”*$这个例子中,变量x的值*被替换并显示了出来。为什么结果不是文件名的列表呢?x变量被替换后,结果为 echo “*”而*在双引号中也是被屏蔽的(不屏蔽的只有$等三中符号),所以结果只显示*。所以,如果希望替换变量的值,而又不希望shell把替换的结果当做特殊字符对待,就应该把变量名放在双引号中。可以用双引号来对shell隐藏单引号,反之亦然。三、反斜杠反斜杠\的作用与单引号相似,能够屏蔽所有字符(包括反斜杠)的特殊意义。与单引号的区别在于: 1、反斜杠不用成对出现,而单引号必须成对2、反斜杠只屏蔽紧跟在之后的单个字符,评比多少字符就需要多少个反斜杠
页:
[1]