shell中单引号、双引号、反引号、反斜杠的使用

2010年02月17日 Linux基础 评论 3 条 阅读 19,670 views 次

shell可以识别4种不同类型的引字符号: 单引号字符('') 双引号字符("") 反斜杠字符(\) 反引号字符也就是ESC下方的键(`)

1. 单引号 ( '' )
例如
有个电话本文件phonenum
内容如下:
sophia 12345678
sophia zhang 45678901
sophia wang 01234567

如果要查找sophia zhang的话,就不能用
# grep sophia zhang phonenum
这个命令的意思是:从zhang phonenum这两个文件中查找sophia的关键字
所以说,我们要用单引号('')把sophia zhang引起来,也就是下面的命令
# grep 'sophia zhang' phonenum
所以说,当shell碰到第一个单引号时,它将忽略掉其后所有特殊字符,直到右引号位置结束。

2. 双引号 ( "" )
双引号作用与单引号类似。单引号是让shell忽略所有特殊字符,而双引号只要求忽略大多数的字符。
具体说,括在双引号中的三种特殊字符不被忽略:$,\,` ,即双引号会解释字符串的特别意思,而单引号直接使用字符串.如果使用双引号将字符串赋给变量并反馈它,实际上与直接反馈变量并无差别。如果要查询包含空格的字符串,经常会用到双引号。
# x=*
# echo $x
anaconda-ks.cfg install.log install.log.syslog

上面的命令会列出所在目录下的文件
# echo '$x'
$x

单引号只当普通的字符列出来
# echo "$x"
*

双引号是输了里面变量的内容

通过这个例子可以看出无引号、单引号和双引号之间的区别。在最后一种情况中,双引号告诉shell在引号内照样进行变量名替换,所以shell把$x替换为*,因为双引号中不做文件名替换,所以就把*作为要显示的值传递给echo。 对于第一种情况需要进一步说明,shell在给变量赋值时不进行文件名替换(这从第三种情况中也能看出来),各步骤发生的精确次序如下: shell扫描命令行,把x的值设为星号*;
shell再次扫描命令行,碰到星号*,把它替换成当前目录下的文件清单;
shell启动执行echo命令,把文件清单作为参数传递给echo.
这个赋值的先后次序非常重要:shell先作变量替换,然后作文件名替换,最后把这行处理为参数

3. 反引号(``)
命令替换是指shell能够将一个命令的标准输出插在一个命令行中任何位置。shell中有两种方法作命令替换:把shell命令用反引号或者$(...)结构括起来,其中,$(...)格式受到POSIX标准支持,也利于嵌套。
# echo The date and time is `date`
The date and time is Wed Feb 17 13:14:43 CST 2010

# echo Your current working directory is $(pwd)
Your current working directory is /root

这里的$pwd就相当于 `pwd`

4. 反斜杠 backslash-escaped( \ )
反斜杠一般用作转义字符,或称逃脱字符,linux如果echo要让转义字符发生作用,就要使用-e选项,且转义字符要使用双引号
echo -e "\n"
反斜杠的另一种作用,就是当反斜杠用于一行的最后一个字符时,shell把行尾的反斜杠作为续行,这种用法,在分几行输入长命令时经常使用。

3 条留言  访客:1 条  博主:0 条   引用: 2 条

  1. 好文章,内容一针见血.禁止此消息:nolinkok@163.com

来自外部的引用: 2 条

  • 学习Linux之文件查找/搜索 | 克儿博客
  • shell脚本学习笔记:基本语法、流程控制、自定义函数 | Spark & Shine

给我留言

Copyright © 羽飞博客 保留所有权利.   Ality主题 皖ICP备14013844号-1

用户登录