0

有一个简单的代码来演示这个问题:

[kan@altegom ~]$ ( A=1; ls | if true; then A=2; fi; echo $A; )
1

我期望 output 2,但是因为if在管道中执行(我认为它实例化了一个新的 shell),所以变量赋值是不可见的。

如何从管道中更改变量?

4

2 回答 2

4

改用进程替换:

( A=1; if true; then A=2; fi < <(ls); echo $A; )

或者这里带有命令替换的字符串:

( A=1; if true; then A=2; fi <<< "$(ls)"; echo $A; )
于 2013-08-08T16:38:17.223 回答
1

或将第二个命令括起来:

( A=1; ls | { if true; then A=2; fi; echo $A; } )
于 2013-08-08T17:10:57.697 回答