为什么要避免使用子壳呢?

rua*_*akh 13 bash subshell

我已经看到很多关于Stack Overflow的答案和评论,提到做一些事情来避免子shell.在某些情况下,给出了一个功能上的原因(通常,可能需要读取在其中分配的子shell之外的变量),但在其他情况下,避免似乎本身就被视为目的.例如

为什么是这样?是为了风格/优雅/美丽?为了表现(避免分叉)?为了防止可能的错误?别的什么?

Cha*_*ffy 7

有一些事情正在发生.

首先,当它只发生一次时,分支子shell可能是不明显的,但如果你在一个循环中这样做,它会增加可衡量的性能影响.在Windows等平台上,性能影响也更大,因为分叉并不像现代Unixlikes那样便宜.

第二,分支子shell意味着你有多个上下文,并且在它们之间切换时会丢失信息 - 如果你改变代码以在子shell中设置变量,那么当子shell退出时该变量就会丢失.因此,您的代码中包含的内容越多,以后修改它时就越需要小心,以确保您所做的任何状态更改都会实际持续存在.

有关由子壳引起的令人惊讶的行为的一些示例,请参阅BashFAQ#24.