当我输入ls -l $(echo file)
括号中的输出(这只是简单的回声)时,会将其传递给外部ls -l
命令。它等于简单的ls -l file
。
当我输入ls -l (echo file)
时,我们遇到错误,因为无法将()
嵌套在外部命令中。
有人可以帮我理解$()
和()
之间的区别吗?
答案 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
中的另一个命令/表达式对:((...))
是一个算术语句,而$((...))
是一个算术表达式。