Evitar chaves no BASH para criar sub-shell

3

Preciso de chaves para especificar prioridade de avaliação de expressões, mas não quero que chaves criem sub-scripts. Veja o que acontece quando esse código de exemplo é executado:

Exemplo de script

#!/bin/bash

false || (echo "First" && exit 1)
false || (echo "Second" && exit 2)
exit 3

Saída

First
Second

Parece que as chaves criam sub-scripts, onde a saída não faz com que o script principal saia.

Qual é a maneira mais elegante de fazer o que eu quero? De preferência sem blocos e aninhamento. Obrigado!

    
por java.is.for.desktop 16.01.2014 / 19:40

1 resposta

6

Esses () são parênteses e eles lançam uma subshell

Esses {} são chaves e são para agrupamento no shell atual. exit sairá do seu script.

Observe que os requisitos de espaços em branco são mais rigorosos ( { precisa ser seguido por espaços em branco; } precisa ser precedido por ponto-e-vírgula mais espaço em branco ou uma nova linha)

false || { echo foo; echo bar; }     # this is OK
false || {echo foo; echo bar}        # not OK

Consulte Comandos de agrupamento no manual para obter detalhes.

    
por 16.01.2014 / 20:34