我在 Bash 脚本中看到以下语法:
>$(command) &
我知道&
末尾的“&”符号会使命令在后台运行,但我从未见过它与美元符号和命令周围的括号结合在一起。
它有什么作用?
答案1
简短答案
给定语法,结果与你获取运行 just 的输出然后尝试运行的$(command) &
结果相同command
那作为命令。所有这些都将在后台完成,这意味着终端上不会有任何可见的输出或挂起。
例如,如果我们有一个名为mycommand.txt
以下内容的文本文件:
echo "Hello World"
然后命令
$(cat mycommand.txt) &
相当于运行
echo "Hello World" &
但是由于我们添加了与号 ( &
),我们将看不到该命令的任何输出,因此它在这个例子中几乎毫无用处。
长答案(解释)
美元符号$
(变量)
括号中事物前的美元符号通常指的是变量。这意味着此命令要么从 bash 脚本向该变量传递参数,要么获取该变量的值。bash 脚本中调用和声明变量的区别如下:
声明变量没有美元符号并称之为和美元符号。例如,包含以下内容的脚本
#!/bin/bash
STR="Hello World!"
echo $STR
将输出此
Hello World!
括号()
- 命令替换
命令替换允许命令的输出替换命令本身。当命令以下列方式括起来时,就会发生命令替换:
$(command)
或者
`command`
Bash 通过在子 shell 环境中执行命令并将命令替换为命令的标准输出(删除所有尾随换行符)来执行扩展。嵌入的换行符不会被删除,但可以在分词期间删除。命令替换$(cat file)
可以用等效但更快的 来替换$(< file)
。
Ampersand &
- 后台进程
然后,正如您所说,& 符号或&
符号用于在后台运行它。
答案2
它将 的输出command
作为命令并在后台运行,其功能与 相当eval
。