gpt4 book ai didi

bash - 在大括号和管道中对命令进行分组不会保留变量

转载 作者:行者123 更新时间:2023-11-29 08:59:21 26 4
gpt4 key购买 nike

假设我在当前工作目录中有一个文件myfile。如果命令正常执行,我想设置一个变量,但也使用它的结果。

$ ls myfile && v=3
myfile
$ echo "$v"
3

但现在我也想通过管道传输结果,所以我使用 { list; 对命令进行分组的语法:

$ unset v$ { ls myfile && v=3; } | grep myfmyfile$ echo "$v"                  # v is not set

Bash reference manual -> 3.2.4.3 Grouping Commands说:

{ list; }

Placing a list of commands between curly braces causes the list to be executed in the current shell context. No subshell is created. The semicolon (or newline) following list is required.

因此,根据我的理解,v 应该设置为 3。但它并没有发生。为什么?

最佳答案

导致创建子外壳的不是大括号,而是管道。

证明:

$ { ls && v=3; } > tmp
$ echo "$v"
3

引用Greg :

In most shells, each command of a pipeline is executed in a separate SubShell.

关于bash - 在大括号和管道中对命令进行分组不会保留变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30727590/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com