2015-01-21 108 views

回答

2

在bash 管道的兩個雙方在子shell(https://www.gnu.org/software/bash/manual/bashref.html#Pipelines)的運行,除非你shopt -s lastpipe; set +m,其中,在管最後命令在當前shell

$ sum=0; seq 10 | while read n; do ((sum+=n)); done; echo $sum 
0 
$ shopt -s lastpipe 
$ sum=0; seq 10 | while read n; do ((sum+=n)); done; echo $sum 
0 
$ set +m 
$ sum=0; seq 10 | while read n; do ((sum+=n)); done; echo $sum 
55 

在您的例子被執行,在管道中的第一個命令將總是在一個子shell中運行。

我不會說ash