В чем разница между () и {} в bash для группировки вывода и команд?

В чем разница между () и {} в bash для группировки вывода и команд?

Здесь 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Однако есть изменения.

Связанный контент