$(...)和`...`之间有什么区别?

时间:2015-08-29 06:40:27

标签: bash

使用GNU bash 4.1.2,我得到:

[roxma@VM_6_207_centos ~]$ echo `echo '\\'`
\
[roxma@VM_6_207_centos ~]$ echo $(echo '\\')
\\

1 个答案:

答案 0 :(得分:2)

差异记录在man bash

  

当使用旧式反引号替换形式时,反斜杠   保留其字面含义,除非后跟$,`或\。该   第一个反引号前面没有反斜杠会终止命令   代换。使用$(命令)表单时,所有字符之间   括号组成命令;没有人受到特别对待。

根据man bash,如果$遵循反斜杠,则会发现两种形式之间存在类似差异:

$ echo `echo 'out: \$'`
out: $
$ echo $(echo 'out: \$')
out: \$

如果一个反引号跟随反斜杠,那就相同了:

$ echo `echo 'out: \`'`
out: `
$ echo $(echo 'out: \`')
out: \`

动机

由于在命令替换中将反引号作为字符放置可能很有用,因此反引号表单必须有一种方法来逃避反引号。为了确保一个人可以在任何人想要的地方放置逃脱角色,那么还需要一种方法来逃避逃脱。