在這裡,只有第二個 echo 為 grep 提供資料。
$ echo a1; echo a2 | grep -o a
a1
a
這裡兩個迴聲都是如此。
$ { echo a1; echo a2 ;} | grep -o a
a
a
這裡也一樣。
$ (echo a1; echo a2 )| grep -o a
a
a
那麼()和{}有什麼差別呢?
答案1
圓括號引入了一個子 shell。
$ a=1; { a=2 ; echo $a ; } ; echo $a
2
2
$ a=1; ( a=2 ; echo $a ; ) ; echo $a
2
1
請注意,這$$
在子 shell 中保持不變,因為 bash 不需要重新初始化。$BASHPID
不過,有變化。