LinuxSir.cn,穿越时空的Linuxsir!

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

BASH的`cmd`与$(cmd)有什么区别?

[复制链接]
发表于 2006-11-30 22:28:28 | 显示全部楼层 |阅读模式
看了很多介绍都只说`cmd`尽量不要用,最好用$(cmd),但都没说明原因~~但是系统的脚本到处都用着`cmd`......

举个例子:
1.
  1. #echo `echo \\\z`
  2. \z
  3. #echo $(echo \\\z)
  4. \z
复制代码

2.
  1. #echo `echo "\\\z"`
  2. \z
  3. #echo $(echo "\\\z")
  4. \\z
复制代码

3.
  1. #echo `echo '\\\z'`
  2. \\z
  3. #echo $(echo '\\\z')
  4. \\\z
复制代码

我被以上3种情况完全弄糊涂了,为什么结果差这么多?求解:thank
我的BASH版本是GNU bash, version 3.00.14(1)-release (i686-pc-linux-gnu)
发表于 2006-12-1 00:09:49 | 显示全部楼层
关于为什么系统中到处是` `
而不是$( )
是因为你看到的脚本基本是sh的,而不是bash
bash才支持$( )
(具体哪个版本忘了)
回复 支持 反对

使用道具 举报

发表于 2006-12-1 13:42:00 | 显示全部楼层
``和$()意思基本一样,不过在多个命令替换,存在嵌套的时候,``就无能为力了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-1 23:56:01 | 显示全部楼层
那怎么解释上面3种情况呢?
回复 支持 反对

使用道具 举报

发表于 2006-12-8 01:40:41 | 显示全部楼层
使用`是为了兼容问题, 另外如果使用bash的话, 尽量使用$()可以避免很多问题.

backslash在``是比较特别的, 如果\后面紧跟\,$,` 那么backslash会作为逃逸符使用, 然后在传给子shell. 而在$()中任何字符都会直接传给子shell

PS: bash的man页里面有解释
回复 支持 反对

使用道具 举报

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

本版积分规则

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