是命令替换$(foo)基础吗?

时间:2010-09-24 18:29:59

标签: bash posix sh

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

FOO=$(echo bar)

FOO=`echo bar`

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

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

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

这是否属于bashism的定义?

  

bashisms,即未定义的特征   POSIX(不会在短划线或一般情况下工作   / bin / sh的)。

2 个答案:

答案 0 :(得分:12)

这是一回事。所以不,它不是一种基础,也不仅仅与bash有关。

  

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

$(command)
     

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

`command`
     

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


资源:

答案 1 :(得分:11)

实际上,$( ... )命令替换语法是由POSIX定义的,尽管它不是早期SVID sh标准的一部分。因此,只要您不关心在POSIX前系统上运行,它应该没问题。