学点shell-单引号,双引号与反引号

引用

最近在学习linux shell 时,发现对于单引号('),双引号("),反引号(`)的用法很容易搞混,

为此专门查询了一些资料并进行了总结,在此和大家一起分享并学习。

1 单引号

在shell中用到单引号的原因有多种,其中用到最多的是利用单引号屏蔽特殊字符,避免特殊字符被shell所解释。

话不多说,举例说明:

vm11090004 ~ # echo take    a    example
take a example

从上例中发现输出中的空格被删除了,如果想将空格原封不动的输入,该怎么办呢?上例子

vm11090004 ~ # echo 'take    a    example'
take    a    examplevm

单引号屏蔽特殊字符:

11090004 ~ # i='test'
vm11090004 ~ # echo '$i'
$i

vm11090004 ~ # k='* this is special'
vm11090004 ~ # echo $k
20130522_10.72.14.40.log coupon_1_1_succ.txt coupon_1_1.txt

第二个例子的本意是将*输出,但是最终的结果是输出了当前目录下的文件列表。

出现这种结果的原因是首先将$k替换为* this is specia,在变量名替换后,又进行了文件名的替换。

即在echo执行之前,将*替换为当前目录下的所有文件名。有一种方法可以解决此烦恼,就是使用双引号。

2 双引号

双引号与单引号的作用类似,单引号会告诉shell忽略大多数的特殊字符而双引号没那么严格,会忽略多数的特殊字符,

具体来说,括在双引号中的以下字符不会被忽略

1.美元符号

2.反引号

3.反斜杠

vm11090004 ~ # echo '$k'
$k
vm11090004 ~ # echo "$k"
* this is special

上例中可以看出,单引号忽略了美元符号,将单引号中内容完全输出。而双引号则不忽略美元符号,$k内容进行了相应

的替换,由于*在双引号内不会进行替换,所以就将变量替换后的内容发送给echo输出。

综上,当变量需要进行替换,但又不希望shell将替换后的内容当作特殊符号对待时使用双引号。

3 反引号

反引号与前面提到的双引号与单引号有所不同,反引号的目的不是防止shell处理某些字符,而是告诉shell执行括号中的命令,

同时将命令的标准输出插入到命令中相应的位置中。

vm11090004 ~ # echo `date`
Mon May 27 00:51:37 CST 2013

 

 

posted on 2013-05-27 00:55  蓝与黑的世界  阅读(276)  评论(0)    收藏  举报

导航