命令替换有两种不同的语法,
FOO=$(echo bar)
和
FOO=`echo bar`
据我所知,第一种方法是在 Bash 中定义的,而第二种方法是在sh
.
考虑以下在sh
脚本中使用命令替换。
#!/bin/sh
FOO=$(echo bar)
这是否属于bashism的定义?
bashisms,即 POSIX 未定义的功能(在破折号或一般 /bin/sh 中不起作用)。
实际上,$(
...)
命令替换语法是由 POSIX 定义的,尽管它不是早期SVID sh
标准的一部分。因此,只要您不关心在 pre-POSIX 系统上运行,就应该没问题。
这是同一件事。所以不,它不是一种 bashism,也不是只与 bash 有关。
命令替换
命令替换允许用命令的输出代替命令名称本身。当命令包含以下内容时,会发生命令替换:$(command)
或(''反引号''版本):
`command`
shell 通过在子 shell 环境中执行命令并将命令替换替换为命令的标准输出来扩展命令替换,在替换结束时删除一个或多个换行符的序列。(输出结束前嵌入的换行符不会被删除;但是,在字段拆分期间,它们可能会被转换为空格,具体取决于 IFS 的值和有效的引用。)
资源 :