Chinaunix首页 | 论坛 | 博客
  • 博客访问: 161221
  • 博文数量: 36
  • 博客积分: 648
  • 博客等级: 上士
  • 技术积分: 335
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-09 15:29
文章分类

全部博文(36)

文章存档

2013年(2)

2012年(26)

2011年(8)

我的朋友

分类: LINUX

2012-09-30 09:59:53

"和'都是用来关闭meta的,区别是'"要多关闭些meta
如果不关闭这些meta,命令就不会正确处理传递给他的参数,因为shell会首先解释这些meta

点击(此处)折叠或打开

  1. [lfs@lfs tmp]$ a='b c'
  2. [lfs@lfs tmp]$ echo $a
  3. b c

如果我希望屏幕显示的结果是"$a"而不是"b c",那么我就需要把$这个meta关闭掉。请看下面的例子

点击(此处)折叠或打开

  1. [lfs@lfs tmp]$ a='b c'
  2. [lfs@lfs tmp]$ echo $a
  3. b c
  4. lfs@lfs tmp]$ echo '$a'
  5. $a
下面的例子中,第二个命令由于没有关闭()这个meta,命令执行的时候shell首先解释(),当然出现错误了。
  1. [lfs@lfs tmp]$ echo '('$a')'
  2. (b c)
  3. [lfs@lfs tmp]$ echo ($a)
  4. -bash: syntax error near unexpected token `$a'

下面的例子中,因为单引号被双引号括起来,所以shell不会解释单引号,单引号就会被echo命令显示

  1. [lfs@lfs tmp]$ echo "('$a')"
  2. ('b c')

考虑一下为什么下面的例子和上面的输出结果不一样。

  1. [lfs@lfs tmp]$ echo '("$a")'
  2. ("$a")

下面两个命令为什么相同的结果?

  1. [lfs@lfs tmp]$ echo "($a)"
  2. (b c)
  3. [lfs@lfs tmp]$ echo "("$a")"
  4. (b c)

因为()这个meta被双引号关闭了,不同的是第二组命令用两组双引号分别关闭了"("")"
还是上面的例子,我们加一个;看看

  1. [lfs@lfs tmp]$ echo "($a;)"
  2. (b c;)
  3. [lfs@lfs tmp]$ echo "("$a;")"
  4. (b c)
  5. -bash: ): command not found

想想为什么第二个会出错
注:

  1. [lfs@lfs tmp]$ ")"
  2. -bash: ): command not found

想想下面两个命令为什么不同的结果

  1. [lfs@lfs tmp]$ echo "($a)"
  2. (b c)
  3. [lfs@lfs tmp]$ echo '($a)'
  4. ($a)

提示:从单引号和双引号关闭不同meta方向入手考虑

 

阅读(2329) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~