这个问题来自它的答案之一,即阅读Linuxtopia - Chapter 20. Subshells的建议。
Linuxtopia 网站上的这个声明让我有点困惑:
子shell 让脚本进行并行处理,实际上同时执行多个子任务。
https://www.linuxtopia.org/online_books/advanced_bash_scripting_guide/subshells.html
这是否意味着从脚本运行的子shell 总是与原始脚本并行运行?从实验上看,情况似乎并非如此,但我会很感激专家以一种或另一种方式确认。
#! /usr/bin/bash
# This script reliably prints:
# hello
# world
# 0
# ...implying that the the subshell is not run in parallel with this script.
(echo hello;
echo world)
echo $?
.
#! /usr/bin/bash
# This script prints:
# 0
# hello
# world
# ...implying that the the subshell is run in parallel with this script.
(echo hello;
echo world) &
echo $?
使用&
Linuxtopia 站点可能意味着“ [让]脚本进行并行处理”吗?
注意:我熟悉&
在 bash 中为命令添加后缀的概念......它将所述命令作为后台进程运行。所以我的问题更多的是关于在子shell中执行的命令是否默认作为后台/并行进程运行,或者是否在&
此处添加也是导致后台/并行执行的原因。对我来说,Linuxtopia 文章的措辞暗示了前者,这似乎与观察不符。
取决于您如何创建子外壳。
( command )
将command
在子shell 中运行并等待子shell 完成,然后再继续。command &
将command
在后台的子shell中运行。shell 将继续执行下一个命令,而无需等待子 shell 完成。这可以用于并行处理。coproc command
与 类似command &
,但也在主壳和子壳之间建立了双向管道。