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

圆括号引入了一个子壳层。

$ a=1; { a=2 ; echo $a ; } ; echo $a
2
2
$ a=1; ( a=2 ; echo $a ; ) ; echo $a
2
1

请注意,$$在子 shell 中这保持不变,因为 bash 不需要重新初始化。$BASHPID但是会发生变化。

相关内容