我在 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)
。
&
- 后台进程然后和号,或&
符号,如你所说,用于在后台运行它。