10.3.6 特殊字符的引用
在Linux系统中,有些字符对shell有特殊含义,但有时用户不需要使用这些字符的特殊含义,因此就要消除其特殊含义。消除特殊字符特殊含义的机制称为引用或转义。
(1)双引号
使用双引号可以消除大多数字符的特殊含义,但不能消除$(美元符号)、`(反引号)和\(反斜杠)的特殊含义。如果字符串中包含空白字符,如空格、制表符等,最好使用双引号将字符串括起来,以保留字符串中的空白符,例如,下面的例子说明使用双引号可以消除特殊字符的特殊含义:
$ echo 〉
bash: syntax error near unexpected token 'new line'
之所以出现错误,是因为Shell将该命令解释为:将echo命令的输出重定向到一个文件,由于命令行上没有文件名,所以显示错误信息。使用双引号将参数括起来则可以解决上述问题。
$ echo "〉"
〉
当字符串中使用空白符时,最好使用双引号,以免出现错误,例如,下例使用grep查找字符串“Davey Wire”,因为没有加双引号,grep将“Davey”认作字符串,而把“Wire”当作文件名。
$grep Davey Wire /etc/passwd
grep: Wire : No such file or directory
要解决这个问题,可将字符串用双引号括起来,如下所示:
$grep "Davey Wire" /etc/passwd
下面的例子说明双引号不能消除$的特殊含义:
$child=boy
$ echo "The $child did well"
The boy did well
(2)单引号
单引号的工作方式与双引号相似,但是单引号可以消除所有字符的特殊含义,例如:
$child=boy
$ echo ' The $child did well '
The $child did well
从上例中可以看出,$保持了其本身的含义,作为普通字符出现。
(3)反引号
反引号(`)这个字符所对应的键一般位于键盘的左上角,不要将其同单引号(')混淆。反引号括起来的字符串被shell解释为命令,在执行时,shell首先执行该命令行,并以它的标准输出结果取代整个反引号(包括两个反引号)部分,例如:
$ ls
test1.sh test2.sh
$ st="There are follow files in this folder: `ls`"
$ echo $st
There are follow files in this folder: test1.sh test2.sh
(4)反斜杠
反斜杠消除单个字符的特殊含义,即将紧跟其后的单个字符按字符本来的实际含义来解释,例如,要将字符串“$test”赋给变量var,则应使用
$var=\$test
若要删除当前目录下的文件temp?,则应使用命令:
$rm temp\?
若是用命令“rm temp?”将会删除当前目录下所有文件名由temp后跟单个字符组成的文件。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。