子()是子壳吗?

leeand00 05/09/2018. 3 answers, 4.198 views
bash subshell syntax

我理解子shell语法是()$()只是一个可以从中检索变量值的子shell?

注意:这适用于bash 4.4,基于其文档中的不同措辞。

3 Answers


Gilles 05/09/2018.

根据定义, $(…)是一个子shell:它是shell运行时状态¹的副本,对子shell中所做状态的更改对父进程没有影响。 子shell通常通过分叉新进程来实现(但是在某些情况下,某些shell可以优化它)。

您不能从子shell中检索变量值。 如果对变量的更改对父级有影响,则它不会是子shell。 它是一个子shell,其父output可以检索。 $(…)创建的子shell将其标准输出设置为管道,父管道从该管道读取并收集输出。

还有一些其他构造可以创建子shell。 我认为这是bash的完整列表:

  • 用于分组的子shell ( … )除了创建子shell并等待它终止之外什么都不做。 与{ … }对比,它将命令纯粹用于语法目的而不创建子shell。
  • 背景… &创建一个子shell,不等待它终止。
  • 管道… | … … | …创建两个子壳,一个用于左侧,一个用于右侧,并等待两个子壳终止。 shell创建一个管道,并将左侧的标准输出连接到管道的写入端,将右侧的标准输入连接到读取端。 在一些shell(ksh88,ksh93,zsh,bash中设置了lastpipe选项并且有效),右侧在原始shell中运行,因此管道构造仅创建一个子shell。
  • 命令替换$(…) (也拼写为`…` )创建一个子shell,其标准输出设置为管道,收集父项中的输出并扩展到该输出,减去其尾随换行符。 (并且输出可能会进一步受到分裂和整合,但这是另一个故事。)
  • 进程替换<(…)创建一个子shell,其标准输出设置为管道并扩展为管道的名称。 父(或其他一些进程)可以打开管道与子shell通信。 >(…)做同样的事情,但标准输入管道。
  • Coprocesscoproc …创建一个子shell并且不等待它终止。 子shell的标准输入和输出均设置为管道,父管道连接到每个管道的另一端。

¹ 与运行单独的shell相反


从bash版本4.4中的bash(1)手册页,“扩展”部分,“命令替换”小节:

Bash通过在子shell环境中执行command来执行扩展[...]


Iskustvo 05/09/2018.

是的, ( commands... )是一个bash子shell,它将在另一个进程中执行commands...

你有$( commands... )的唯一区别是这部分代码将在执行commands...commands...所有内容替换commands...写入stdout


HighResolutionMusic.com - Download Hi-Res Songs

1 (G)I-DLE

POP/STARS flac

(G)I-DLE. 2018. Writer: Riot Music Team;Harloe.
2 Ariana Grande

​Thank U, Next flac

Ariana Grande. 2018. Writer: Crazy Mike;Scootie;Victoria Monét;Tayla Parx;TBHits;Ariana Grande.
3 Clean Bandit

Baby flac

Clean Bandit. 2018. Writer: Jack Patterson;Kamille;Jason Evigan;Matthew Knott;Marina;Luis Fonsi.
4 Imagine Dragons

Bad Liar flac

Imagine Dragons. 2018. Writer: Jorgen Odegard;Daniel Platzman;Ben McKee;Wayne Sermon;Aja Volkman;Dan Reynolds.
5 Halsey

Without Me flac

Halsey. 2018. Writer: Halsey;Delacey;Louis Bell;Amy Allen;Justin Timberlake;Timbaland;Scott Storch.
6 BTS

Waste It On Me flac

BTS. 2018. Writer: Steve Aoki;Jeff Halavacs;Ryan Ogren;Michael Gazzo;Nate Cyphert;Sean Foreman;RM.
7 Nicki Minaj

No Candle No Light flac

Nicki Minaj. 2018. Writer: Denisia “Blu June” Andrews;Kathryn Ostenberg;Brittany "Chi" Coney;Brian Lee;TJ Routon;Tushar Apte;ZAYN;Nicki Minaj.
8 Backstreet Boys

Chances flac

Backstreet Boys. 2018.
9 BlackPink

Kiss And Make Up flac

BlackPink. 2018. Writer: Soke;Kny Factory;Billboard;Chelcee Grimes;Teddy Park;Marc Vincent;Dua Lipa.
10 Little Mix

The Cure flac

Little Mix. 2018. Writer: Pete Kelleher;Camille Purcell;Tom Barnes;Ben Kohn.
11 Fitz And The Tantrums

HandClap flac

Fitz And The Tantrums. 2017. Writer: Fitz And The Tantrums;Eric Frederic;Sam Hollander.
12 Diplo

Close To Me flac

Diplo. 2018. Writer: Ellie Goulding;Savan Kotecha;Peter Svensson;Ilya;Swae Lee;Diplo.
13 The Chainsmokers

Beach House flac

The Chainsmokers. 2018. Writer: Andrew Taggart.
14 Bradley Cooper

Always Remember Us This Way flac

Bradley Cooper. 2018. Writer: Lady Gaga;Dave Cobb.
15 Kelly Clarkson

Never Enough flac

Kelly Clarkson. 2018. Writer: Benj Pasek;Justin Paul.
16 Lady Gaga

I'll Never Love Again flac

Lady Gaga. 2018. Writer: Benjamin Rice;Lady Gaga.
17 Frida Sundemo

Apologize flac

Frida Sundemo. 2018.
18 Little Mix

Woman Like Me flac

Little Mix. 2018. Writer: Nicki Minaj;Steve Mac;Ed Sheeran;Jess Glynne.
19 Imagine Dragons

Machine flac

Imagine Dragons. 2018. Writer: Wayne Sermon;Daniel Platzman;Dan Reynolds;Ben McKee;Alex Da Kid.
20 Billie Eilish

When The Party's Over flac

Billie Eilish. 2018. Writer: Billie Eilish;FINNEAS.

Related questions

Hot questions

Language

Popular Tags