学点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
浙公网安备 33010602011771号