%20%D0%B8%20%7B%7D%20%D0%B2%20bash%20%D0%B4%D0%BB%D1%8F%20%D0%B3%D1%80%D1%83%D0%BF%D0%BF%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B8%20%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D0%B0%20%D0%B8%20%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%3F.png)
Здесь grep получает только второй сигнал echo.
$ 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
Обратите внимание, что $$
в подоболочке все остается по-прежнему, поскольку bash не нужно повторно инициализировать. $BASHPID
Однако есть изменения.