LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: johnny_jiang

实在忍不住了,一直想不通的问题, backslash在$() 和 ``中的不同

[复制链接]
 楼主| 发表于 2006-3-15 16:44:10 | 显示全部楼层
Post by davi
``中得到得结果作为前面echo的参数
这样理解呢


To davi:

其实一开始我也是这样理解的,但是没有找到相关的资料加以证实,而且在man的bash中并没有提到这一点,不知道可不可以发份邮件问问bash的author,呵呵
回复 支持 反对

使用道具 举报

发表于 2006-3-15 16:56:01 | 显示全部楼层
你第一贴引用的不是吗。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-15 17:04:57 | 显示全部楼层
Post by seamonkey
你第一贴引用的不是吗。


To seamonkey:

能否相告你是怎么理解这段的
回复 支持 反对

使用道具 举报

发表于 2006-3-15 17:22:32 | 显示全部楼层
命令替换允许命令的输出替换命令名,命令替换有两种格式:
$(command)

‘command‘

在`command`这种格式中,反斜杠保持字面意义,也就是说不被看作转义符,除非后面跟随的是$,`,\中的任何一个字符,命令替换从`开始到接下来第一个不被\反斜杠转义的`结束。

而在$(command)这种格式中,任何包括在括号中的字符都保持原来的字面意义,而不会被当成特殊字符。
回复 支持 反对

使用道具 举报

发表于 2006-3-15 18:12:44 | 显示全部楼层
Post by seamonkey
命令替换允许命令的输出替换命令名,命令替换有两种格式:
$(command)

‘command‘

在`command`这种格式中,反斜杠保持字面意义,也就是说不被看作转义符,除非后面跟随的是$,`,\中的任何一个字符,命令替换从`开始到接下来第一个不被\反斜杠转义的`结束。

而在$(command)这种格式中,任何包括在括号中的字符都保持原来的字面意义,而不会被当成特殊字符。

谢谢seamonkey,又学到了不少,呵呵
回复 支持 反对

使用道具 举报

发表于 2006-3-15 18:32:36 | 显示全部楼层
总算彻底想通了,呵呵


`command`格式中,“\”被shell处理为转义字符(如果后跟特殊含义字符$,\,`的话),因此`echo \$x`的结果相当于直接在命令行中输入echo $x并回车得到的结果,于是执行echo `echo \$x`得到结果为a(变量x的值)

而$(command)格式中,“\”被shell处理为普通字符,因此$(echo \$x)的结果相当于直接在命令行中输入echo \$x并回车得到的结果,于是执行echo $(echo \$x)得到结果为$x

我觉得命令替换可以理解为将要替换的命令传递给一个子shell执行,然后将得到的结果返回到被替换命令的位置继续执行父shell里的命令。`echo \$x`中,被传递给子shell的实际是echo $x;而$(echo \$x)中被传递给子shell的就是echo \$x
回复 支持 反对

使用道具 举报

发表于 2006-3-15 19:28:16 | 显示全部楼层
在bash里,``和$()是一样的,但bash推荐用$(),好处是可以嵌套,并且``会和''相混淆。建议看看置顶帖的命令行处理。24楼的不要误导人呀!
回复 支持 反对

使用道具 举报

发表于 2006-3-15 19:38:49 | 显示全部楼层
下贴详细说明了``和$()的区别:

shell历险之——引用的迷途
http://www.chinaunix.net/jh/24/686286.html

好东东不敢独享^_^
回复 支持 反对

使用道具 举报

发表于 2006-3-15 19:40:35 | 显示全部楼层
Post by jiazhengw
在bash里,``和$()是一样的,但bash推荐用$(),好处是可以嵌套,并且``会和''相混淆。建议看看置顶帖的命令行处理。24楼的不要误导人呀!

我倒,说别人误导人之前先自己在命令行实际操作确认一下-_-!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-15 20:09:01 | 显示全部楼层
Post by seamonkey
命令替换允许命令的输出替换命令名,命令替换有两种格式:
$(command)

‘command‘

在`command`这种格式中,反斜杠保持字面意义,也就是说不被看作转义符,除非后面跟随的是$,`,\中的任何一个字符,命令替换从`开始到接下来第一个不被\反斜杠转义的`结束。

而在$(command)这种格式中,任何包括在括号中的字符都保持原来的字面意义,而不会被当成特殊字符。


最主要是对最后一句的理解:none are treated specially
我是把他理解为一切都按照象处理简单命令那样地处理。如果按照seamonkey兄地解释似乎是解决了我地疑惑,不过在被命令替换后bash又对替换后地内容进行变量替换,这一点好像不太符合bash命令行的解释过程

小弟的理解有可能有所偏差
回复 支持 反对

使用道具 举报

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

本版积分规则

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