Qual é a diferença entre () e {} no bash para agrupar saídas e comandos

Qual é a diferença entre () e {} no bash para agrupar saídas e comandos

Aqui, apenas o segundo eco alimenta o grep.

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

Aqui ambos os ecos fazem isso.

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

Aqui também.

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

Então, qual é a diferença entre () e {}?

Responder1

Os parênteses redondos introduzem um subshell.

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

Veja bem, isso $$permanece o mesmo no subshell porque o bash não precisa ser reinicializado. $BASHPIDmudanças, no entanto.

informação relacionada