子进程内的Zsh更新变量

问题描述 投票:0回答:1

在Zsh 5.2中,a=0 | a=1 | b=1; echo $a将返回1,但a=0 | (( a++ )) | b=1; echo $a将返回0.为什么?

至于我的理解,|创建了子进程,并且在子进程中更新a不应该反映在父进程中。这对于(( a++ ))案件是正确的,但如何解释a=1案件?

我明确地将b=1添加为管道的最后一部分,因为在Zsh中,最后一个管道将在父进程中执行(从这里:https://www.vidarholen.net/contents/blog/?p=178

在Bash中,管道中的所有元素都将在子shell中运行。在Ksh和Zsh中,除了最后一个之外的所有内容都将在子shell中运行。 POSIX保留未定义。

)。我想创建一个a更新在子进程中的场景。

shell zsh
1个回答
2
投票

如果要将更改的范围限定为子进程,请将其更改为显式。

a=5; (a=0); echo $a

与管道不同,管道具有POSIX未定义的行为(因此每个shell可以决定如何启发式处理),使用( ... )的显式子shell语法完全可以说是明确无误的。

© www.soinside.com 2019 - 2024. All rights reserved.