变量不会从子shell改变

时间:2013-08-08 16:34:58

标签: bash

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

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

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

我怎样才能从管道中更改变量?

2 个答案:

答案 0 :(得分:4)

改为使用流程替换:

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

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

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

答案 1 :(得分:1)

或者将第二个命令加上括号:

( A=1; ls | { if true; then A=2; fi; echo $A; } )