免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 11694 | 回复: 7
打印 上一主题 下一主题

请教echo中的单引号和双引号区别? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-11-18 01:54 |只看该作者 |倒序浏览
请教echo中的单引号和双引号区别?

我看了網中人单引号与双引号区别后对

  1.    $ A=B\ C
  2.    $ echo '"$A"'   # 最外面的是單引號
  3.    "$A"
  4.    $ echo "'$A'"   # 最外面的是雙引號
  5.    'B C'
  6.    (提示:單引號及雙引號,在 quoting 中均被關?#93;了。)
复制代码

还是不理解,并作试验检验




  1. Administrator@typhoon-1 ~
  2. $ a="b
  3. > c
  4. > "

  5. Administrator@typhoon-1 ~
  6. $ echo $a
  7. b c

  8. Administrator@typhoon-1 ~
  9. $ echo '('$a')'
  10. (b c )

  11. Administrator@typhoon-1 ~
  12. $ echo "('$a')"
  13. ('b
  14. c
  15. ')

  16. Administrator@typhoon-1 ~
  17. $ echo "("$a")"
  18. (b c )

  19. Administrator@typhoon-1 ~
  20. $ echo '("$a")'
  21. ("$a")


复制代码


也不能解释自己结果

所以请教大家能不能在给我将详细的呢?

谢谢!

论坛徽章:
0
2 [报告]
发表于 2004-11-18 08:34 |只看该作者

请教echo中的单引号和双引号区别?

"和'都是用来关闭meta的,区别是'比"要多关闭些meta。
如果不关闭这些meta,命令就不会正确处理传递给他的参数,因为shell会首先解释这些meta。
[lfs@lfs tmp]$ a='b c'
[lfs@lfs tmp]$ echo $a
b c

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

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

下面的例子中,因为单引号被双引号括起来,所以shell不会解释单引号,单引号就会被echo命令显示
[lfs@lfs tmp]$ echo "('$a')"
('b c')

考虑一下为什么下面的例子和上面的输出结果不一样。
[lfs@lfs tmp]$ echo '("$a"'
("$a"

下面两个命令为什么相同的结果?
[lfs@lfs tmp]$ echo "($a)"
(b c)
[lfs@lfs tmp]$ echo "("$a""
(b c)

因为()这个meta被双引号关闭了,不同的是第二组命令用两组双引号分别关闭了"("和""
还是上面的例子,我们加一个;看看
  1. [quote][lfs@lfs tmp]$ echo "($a;)"
  2. (b c;)
  3. [lfs@lfs tmp]$ echo "("$a;")"
  4. (b c
  5. -bash: ): command not found[/quote]
复制代码

想想为什么第二个会出错

想想下面两个命令为什么不同的结果
[lfs@lfs tmp]$ echo "($a)"
(b c)
[lfs@lfs tmp]$ echo '($a)'
($a)

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

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2004-11-18 08:43 |只看该作者

请教echo中的单引号和双引号区别?

http://bbs.chinaunix.net/forum/viewtopic.php?t=218853&show_type=new&start=150

看看我写的理解

论坛徽章:
0
4 [报告]
发表于 2004-11-18 16:29 |只看该作者

请教echo中的单引号和双引号区别?

十分感谢楼上两位,wingger的解释我在昨天发贴之前已看过,但我还是不明白。
尤其是单引号中有单引号 和双引号中有双引号的产生的结果

Administrator@typhoon-1 ~
$ a="b
> c
> "

1
Administrator@typhoon-1 ~
$ echo '('$a')'
(b c )

2
Administrator@typhoon-1 ~
$ echo ''$a'' #内外都是单引号
b c

如果單引號及雙引號,在 quoting 中均被關
,那就应该内层单引号只是普通字符,而外层单引号会对
$会关闭,那么为什么1的结果不是('$a'),2的结果不是'$a'呢?


3
Administrator@typhoon-1 ~
$ echo "("$a""
(b c )

4
Administrator@typhoon-1 ~
$ echo ""$a""
b c
同理3,4的结果为什么不应该分别是
("b
c
"

b
c

呢?

还望指教
再次感谢!

论坛徽章:
0
5 [报告]
发表于 2004-11-18 17:28 |只看该作者

请教echo中的单引号和双引号区别?

这样理解吧'单引号是指全部关闭,就是说你在单引号里写的任何东西都是原汁原味出来的。
"双引号中有IFS定义过的、变量、转义符等一切都会被引用、更改再输出,没有定义过的纯文字都原文输出。

论坛徽章:
0
6 [报告]
发表于 2004-11-18 18:11 |只看该作者

请教echo中的单引号和双引号区别?

原帖由 "tired_bird" 发表:
十分感谢楼上两位,wingger的解释我在昨天发贴之前已看过,但我还是不明白。
尤其是单引号中有单引号 和双引号中有双引号的产生的结果

Administrator@typhoon-1 ~
$ a="b
> c
> "

1
Administra..........

引号是成对出现的,但引号是相隔最近的两个成一组,比如下面的例子

"("$f""
一共有四个引号,第一和第二个为一组,第三和第四个为一组,并不是第一和第四和;第二和第三个为一组,明白了吗

论坛徽章:
0
7 [报告]
发表于 2004-11-18 18:44 |只看该作者

请教echo中的单引号和双引号区别?

原帖由 "whtlly" 发表:

引号是成对出现的,但引号是相隔最近的两个成一组,比如下面的例子

"("$f""
一共有四个引号,第一和第二个为一组,第三和第四个为一组,并不是第一和第四和;第二和第三个为一组,明白了吗


这也就是
[lfs@lfs tmp]$ echo "("$a;""
(b c
-bash: ): command not found[/quote]
会报错的原因吧!受益匪浅:)

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
8 [报告]
发表于 2004-11-18 20:32 |只看该作者

请教echo中的单引号和双引号区别?

原帖由 "whtlly" 发表:

引号是成对出现的,但引号是相隔最近的两个成一组,比如下面的例子

"("$f""
一共有四个引号,第一和第二个为一组,第三和第四个为一组,并不是第一和第四和;第二和第三个为一组,明白了吗


你自己不是理解得很清楚了吗?成对的,而不是包含
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP