Bash中$()和()之间的区别

时间:2016-08-23 20:53:24

标签: linux bash unix subshell

当我输入ls -l $(echo file)括号中的输出(这只是简单的回声)时,会将其传递给外部ls -l命令。它等于简单的ls -l file

当我输入ls -l (echo file)时,我们遇到错误,因为无法将()嵌套在外部命令中。

有人可以帮我理解$()()之间的区别吗?

3 个答案:

答案 0 :(得分:14)

-p 80:80$(cmd)的结果替换为字符串,而cmd在子进程中运行命令列表。

如果要将一个或多个命令的输出放入变量,请使用$(cmd)表单。

但是,如果要运行许多命令并将它们视为一个单元 使用()表格。

当您想在后台运行一组命令时,后者非常有用:

(cmd; cmd)

答案 1 :(得分:4)

这些是不同的东西。

$()计算表达式(执行命令),如``(反引号)

> (echo ls)
ls

> $(echo ls)
file1  file2

> `echo ls`
file1  file2

> echo $(echo ls)
ls

答案 2 :(得分:3)

它们不同,但它们之间存在助记关系。

(...)是一个命令,用于启动运行shell命令的新子shell。

$(...)是一个表达式,它启动一个新的子shell,它的扩展是由它运行的命令产生的标准输出。

这类似于bash中的另一个命令/表达式对:((...))是一个算术语句,而$((...))是一个算术表达式。