0
x=0; { x=1; echo $x; } | cat; echo $x
1
0
,而我預計
1
1.
爲什麼?最後,花括號不會創建子外殼。
我用bash和busybox sh(ash)測試過。
x=0; { x=1; echo $x; } | cat; echo $x
1
0
,而我預計
1
1.
爲什麼?最後,花括號不會創建子外殼。
我用bash和busybox sh(ash)測試過。
在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