$(command) & 有什么作用?

Alp*_*ega 16 bash

我在 bash 脚本中看到了以下语法:

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

我知道&末尾的 & 符号使命令在后台运行,但我从未见过它与美元符号和命令周围的括号结合使用。

它有什么作用?

The*_*Odd 25

简答

给定语法$(command) &,结果与您获取 running just 的输出command然后尝试将作为命令运行一样。所有这一切都将在后台完成,这意味着终端中不会有可见的输出或挂起。

例如,如果我们有一个以mycommand.txt内容命名的文本文件:

echo "Hello World"
Run Code Online (Sandbox Code Playgroud)

然后命令

$(cat mycommand.txt) &
Run Code Online (Sandbox Code Playgroud)

将相当于运行

echo "Hello World" &
Run Code Online (Sandbox Code Playgroud)

但是由于我们添加了 & 符号 ( &),我们将看不到此命令的任何输出,因此在此示例中它毫无用处。


长答案(解释)

美元符号$(可变)

括号中事物前的美元符号通常指代一个变量。这意味着此命令要么将参数从 bash 脚本传递给该变量,要么正在为某事获取该变量的值。用于调用和声明变量的 bash 脚本的区别如下:

声明一个变量美元符号,并把它一个美元符号。例如,包含此的脚本

#!/bin/bash
STR="Hello World!"
echo $STR
Run Code Online (Sandbox Code Playgroud)

会输出这个

Hello World!
Run Code Online (Sandbox Code Playgroud)

括号()- 命令替换

命令替换允许命令的输出替换命令本身。当一个命令被如下包围时,会发生命令替换:

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

或者

`command`
Run Code Online (Sandbox Code Playgroud)

Bash 通过在子 shell 环境中执行命令并用命令的标准输出替换命令替换来执行扩展,并删除任何尾随换行符。嵌入的换行符不会被删除,但在分词过程中可能会被删除。命令替换$(cat file)可以替换为等效但更快的$(< file)

&符号&- 后台进程

然后和号,或&符号,如你所说,用于在后台运行它。