有一个简单的代码来演示这个问题:
[kan@altegom ~]$ ( A=1; ls | if true; then A=2; fi; echo $A; )
1
我期望输出2
,但因为if
在管道中执行(我认为它实例化了一个新的shell),所以变量赋值不可见。
我怎样才能从管道中更改变量?
答案 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; } )