【问题标题】:Is command substitution $(foo) bashism?命令替换 $(foo) bashism 吗?
【发布时间】:2011-04-16 22:27:47
【问题描述】:

命令替换有两种不同的语法,

FOO=$(echo bar)

FOO=`echo bar`

据我所知,第一种方法是在 Bash 中定义的,而第二种方法是在 sh 中定义的。

考虑在sh 脚本中使用以下命令替换。

#!/bin/sh
FOO=$(echo bar)

这是否属于bashism 的定义?

bashisms,即未定义的特征 POSIX(不能在破折号或一般情况下工作 /bin/sh)。

【问题讨论】:

  • 始终使用更现代的(在我看来,正确的)版本有两个很好的理由。 $() 几乎比反引号更具可读性,并且 $( $( ) ) 是可嵌套的,这有时是一个巨大的优势。现在没有充分的理由使用反引号。

标签: bash posix sh


【解决方案1】:

这是一样的。所以不,这不是 bashism,也不是仅与 bash 有关。

命令替换
命令替换允许替换命令的输出来代替命令名称本身。当命令如下括起来时会发生命令替换:

$(command)

或(''反引号''版本):

`command`

shell 通过在子shell 环境中执行命令并将命令替换替换为命令的标准输出来扩展命令替换,在替换结束时删除一个或多个换行符的序列。 (输出结束前嵌入的换行符不会被删除;但是,在字段拆分期间,它们可能会被转换为空格,具体取决于 IFS 的值和有效的引用。)


资源:

【讨论】:

【解决方案2】:

实际上,$(...) 命令替换语法是由 POSIX 定义的,尽管它不是早期 SVIDsh 标准的一部分。所以只要你不关心在 pre-POSIX 系统上运行,应该没问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多