O código dentro de { ... }
é executado exatamente da maneira que seria executado sem as chaves, exceto que agora depende do status de saída de get_confirm
.
Se get_confirm
sair com um status de saída zero ("sucesso"), o bloco será executado, caso contrário, não.
É equivalente a
if get_confirm; then
# the contents of the block goes here
fi
(o que eu acho mais legal)
O exemplo do livro é IMHO não é um bom exemplo de uso comum de { ... }
. Um melhor exemplo teria sido
{ echo 'hello world'; date; } >file
que usa um único redirecionamento para redirecionar a saída padrão de ambos os comandos no bloco { ... }
para o mesmo arquivo.
Isto é semelhante a (e tem o mesmo efeito, neste caso, como)
( echo 'hello world'; date ) >file
mas as declarações dentro de { ... }
são executadas no mesmo ambiente que o shell, enquanto as declarações em ( ... )
são executadas em um subshell (um ambiente separado).
Você pode ver a diferença com
{ a=42; }; echo $a
e
( a=1973 ); echo $a
O primeiro produzirá 42
, enquanto o segundo não produzirá 1973
(a atribuição acontece em um subshell e não pode afetar o ambiente externo).
Aviso sobre a gramática: o bloco }
de { ... }
de fechamento deve seguir uma nova linha ou um ;
. { echo 'hello' }
não é válido, enquanto { echo 'hello'; }
e
{
echo 'hello'
}
são.