¿Cuál es la diferencia entre () y {} en bash para agrupar resultados y comandos?

¿Cuál es la diferencia entre () y {} en bash para agrupar resultados y comandos?

Aquí, sólo el segundo eco alimenta al grep.

$ echo a1; echo a2 | grep -o a
a1
a

Aquí ambos ecos lo hacen.

$ { echo a1; echo a2 ;} | grep -o a
a
a

Aquí también.

$ (echo a1; echo a2 )| grep -o a
a
a

Entonces, ¿cuál es la diferencia entre () y {}?

Respuesta1

Los paréntesis redondos introducen una subcapa.

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

Eso sí, eso $$permanece igual en el subshell porque no es necesario reinicializar bash. $BASHPIDcambios, sin embargo.

información relacionada