Diferença entre parênteses e chaves no terminal? [duplicado]

5
( du /etc; du /var; ) > tmp.txt

{ du /etc; du /var; } > tmp.txt

Existe uma diferença entre o () e {}?

A saída de tmp.txt parece exatamente a mesma, e eu estava me perguntando se estou perdendo alguma coisa aqui.

    
por Nelske 04.03.2016 / 18:03

1 resposta

7

Os parênteses fazem com que os comandos sejam executados em uma subcamada.

As chaves fazem com que os comandos sejam agrupados, mas não em uma subcamada.

Dado que o seu exemplo não usa efeitos colaterais, não há diferença real entre os dois. Se houvesse efeitos colaterais, e. definindo ou modificando as variáveis do shell, há uma diferença, pois esses efeitos colaterais aplicados a um sub-shell serão esquecidos quando este sub-shell terminar.

Se, no entanto, você observar mais de perto e comparar o comportamento de diferentes implementações de shell, isso se torna confuso:

O Bourne Shell, e. executa comandos agrupados em um subshell caso haja um redirecionamento de E / S e o ksh93 evita subshells implementando o comportamento do subshell virtual que é feito criando uma cópia temporária de novos parâmetros. Se isso é sempre 100% correto, não é conhecido, ksh93 Version M 1993-12-28 s+ de 2009, por ex. implementa $ (...) incorretamente e $ (alias a = b) afeta o shell principal.

Então, em geral: se você estiver interessado em aspectos específicos, tenha cuidado e verifique seu comportamento real.

    
por 04.03.2016 / 18:07

Tags