bash 中用於對輸出和命令進行分組的 () 和 {} 有什麼區別

bash 中用於對輸出和命令進行分組的 () 和 {} 有什麼區別

在這裡,只有第二個 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不過,有變化。

相關內容