LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 787|回复: 3

【分享】说明 "号 ,'号 和 `号 在echo命令中的作用

[复制链接]
发表于 2005-3-12 22:35:37 | 显示全部楼层 |阅读模式
文章背景:上午做shell练习,自己编了个脚本,试验了一下这三个符号在echo中的用法,花了一个小时,不敢独享。写出来给大家看看。

这里先做一下解释,注意`号,不是单引号(我也不知道它叫什么名字),如果你用的是标准的PC键盘,它是位于“1”键的左边,Tab键的上边,和~在一起。我用的是IBM的键盘。




在echo命令中,位于'之间的字符串,是被原样显示的;位于"之间的字符串,是被解释并显示的;奇妙的是,位于`之间的字符串,是被解释并执行后,再显示的。

举例说明:

脚本myshell,内容为:

echo "basename $0"

echo 'basename $0’

echo `basename $0`

echo " This is `basename $0`"

echo ' This is `basename $0`’

执行它,命令行输入:[root@localhost root]# ./myshell
刁难大家一下,请先对照上面的说明,自己预测一下结果。(坏笑中...)







答案来了!

basename ./myshell

basename $0

myshell

This is myshell

This is `basename $0`

后面两行,您猜对了吗?


解释如下:
echo第一行,因为”间的字符串被解释输出,所以$0被解释为./myshell,输出为:basename ./myshell

echo第二行,因为‘间的字符串被原样输出,所以输出为:basename $0

echo第三行,因为`间的字符串被解释,执行并输出,所以字符串被解释为命令 basename ./myshell,这个命令执行的结果是myshell,
所以输出myshell

echo第四行,因为"间的字符串被解释输出,所以$0被解释,basename $0被执行,输出为:This is myshell

echo第五行,因为‘间的字符串被原样输出,所以输出为:This is `basename $0`

写到这里,我真是佩服shell的设计者了,佩服得五体投地,居然用这么奇怪的符号,设计出这么奇妙的功能,匪夷所思!

给读者出个思考题(!!!请严格按照下面的步骤做,否则结果不可预测,出了问题别打我。):
建立一个目录d,进入目录d,建立一个长度为0的文件a。在命令行上输入`ls`。会有什么结果? 为什么?

关于这个`号,我不明白它的用途在哪里,有哪位有经验的兄弟给说说?先谢了
发表于 2005-3-12 23:41:45 | 显示全部楼层
我猜
`的作用跟$()是一样的, 把标准输出的内容当作参数传递.
像上面说的情况,相当于输入了a,
如echo `ls` 相当于 echo a
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-13 22:05:42 | 显示全部楼层
楼上的兄弟回答正确,加10分。
回复 支持 反对

使用道具 举报

发表于 2005-3-14 17:23:30 | 显示全部楼层
首先下面都是我的说明,不知正确与否,如有错误,敬请指正
1.`我称其为反引号
2.总结一下三种引号的最简单的区别:
a. ' '(单引号):取消所有metacharacter(元字符,就是例如$,\,等).所有在其中的字符均作为普通字符处理(用echo显示就是全部不变的显示).
b." "(双引号):取消除去"(双引号),$(美元符号),\(反斜杠),`(反引号)之外的metacharacter作用,也就是除去这四个其他所有字符均作为普通字符处理.
c.` `(反引号):命令的替换,等价于$(),只是在用` `进行命令嵌套时要注意使用\的escape作用,格式为:
  1. ` command1 \` command2 \` `
复制代码

而$()则不用\,即为:
  1. $(command1 $(command2))
复制代码


不知道这样说好不好理解,这里就不举例子了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表