【发布时间】:2015-11-23 20:16:13
【问题描述】:
使用 GNU bash 4.1.2,我得到:
[roxma@VM_6_207_centos ~]$ echo `echo '\\'`
\
[roxma@VM_6_207_centos ~]$ echo $(echo '\\')
\\
【问题讨论】:
标签: bash
使用 GNU bash 4.1.2,我得到:
[roxma@VM_6_207_centos ~]$ echo `echo '\\'`
\
[roxma@VM_6_207_centos ~]$ echo $(echo '\\')
\\
【问题讨论】:
标签: bash
差异记录在man bash:
当使用旧式反引号形式的替换时,反斜杠 保留其字面意义,除非后面跟有 $、` 或 \。这 前面没有反斜杠的第一个反引号终止命令 替代。使用 $(command) 形式时,所有字符之间 括号构成命令;没有人受到特殊对待。
根据man bash,如果$跟在反斜杠后面,两种形式之间也有类似的区别:
$ echo `echo 'out: \$'`
out: $
$ echo $(echo 'out: \$')
out: \$
如果反斜杠后面有一个反引号,也是一样的:
$ echo `echo 'out: \`'`
out: `
$ echo $(echo 'out: \`')
out: \`
由于将反引号作为字符放入命令替换中可能很有用,因此反引号形式必须有一种方法来转义反引号。为了确保可以将转义字符放在任何想要的位置,那么还需要一种方法来逃避转义。
【讨论】:
$() 正常解析其内容。此外,$() 对人类来说更容易阅读。所以使用$()。