【问题标题】:What is the difference between $(...) and `...`? [duplicate]$(...) 和`...` 有什么区别? [复制]
【发布时间】: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


    【解决方案1】:

    差异记录在man bash:

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

    根据man bash,如果$跟在反斜杠后面,两种形式之间也有类似的区别:

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

    如果反斜杠后面有一个反引号,也是一样的:

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

    动机

    由于将反引号作为字符放入命令替换中可能很有用,因此反引号形式必须有一种方法来转义反引号。为了确保可以将转义字符放在任何想要的位置,那么还需要一种方法来逃避转义。

    【讨论】:

    • 换句话说:反引号有奇怪的引用/转义规则,而$() 正常解析其内容。此外,$() 对人类来说更容易阅读。所以使用$()
    猜你喜欢
    • 2013-02-13
    • 2011-04-26
    • 2016-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-11
    • 2023-03-10
    相关资源
    最近更新 更多