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

les*_*ana 11 bash posix sh

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

FOO=$(echo bar)
Run Code Online (Sandbox Code Playgroud)

FOO=`echo bar`
Run Code Online (Sandbox Code Playgroud)

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

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

#!/bin/sh
FOO=$(echo bar)
Run Code Online (Sandbox Code Playgroud)

请问下的定义是秋天bashism

bashisms,即没有由POSIX定义的功能(不能在短划线或通用/ bin/sh中工作).

Col*_*ert 12

这是同一件事.所以不,它不是一种基础,也不仅仅与bash有关.

命令替换
命令替换允许替换命令的输出来代替命令名称本身.命令替换发生在命令封装如下:

$(command)
Run Code Online (Sandbox Code Playgroud)

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

`command`
Run Code Online (Sandbox Code Playgroud)

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


资源:


Chr*_*odd 11

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