Bar*_*ott 19
$(cmd) 将结果替换cmd为字符串,而(cmd; cmd)在子进程中运行命令列表.
如果要将一个或多个命令的输出放入变量,请使用$(cmd)表单.
但是,如果要运行许多命令并将它们视为一个单元,请使用()表单.
当您想在后台运行一组命令时,后者非常有用:
(git pull; make clean; make all) &
Run Code Online (Sandbox Code Playgroud)
那是不同的东西。
$() 计算一个表达式(执行命令),例如“(反引号)
> (echo ls)
ls
> $(echo ls)
file1 file2
> `echo ls`
file1 file2
> echo $(echo ls)
ls
Run Code Online (Sandbox Code Playgroud)
它们是不同的,但是它们之间存在助记符关系。
(...) 是一个命令,该命令启动一个新的子shell,在其中运行shell命令。
$(...) 是一个表达式,它将启动一个新的子shell,该子shell的扩展是由其运行的命令产生的标准输出。
这类似于:中的另一个命令/表达式对bash:((...))是一个算术语句,$((...))而是一个算术表达式。