Diff entre (x = 100) e {x = 100; }

0

Alguém pode, por favor, explicar as declarações abaixo?

$ x=50

$ (x=100) #here the code executes only with in the subshell. when subshellexecution done then the x value is returned to its original value, i.e. 50

$ echo $x

$ 50

$ x=50

$ { x=100; } #here the x value totaly changes and affecting to the current shell value of x and changes it from 50 to 100

$ echo $x

$ 100

como isso está acontecendo, alguém pode explicar?

    
por PriB 20.01.2015 / 09:42

3 respostas

3

De man bash :

(list) list is executed in a subshell environment (see COMMAND EXECUTION ENVIRONMENT below). Variable assignments and builtin commands that affect the shell's environment do not remain in effect after the command completes.

A command invoked in the separate environment cannot affect the shell's execution environment.

{ list; } list is simply executed in the current shell environment.

    
por 20.01.2015 / 09:54
3

Em shells do tipo Bourne, ( ... ) executa o código em um subshell, portanto, qualquer alteração nas variáveis é local para este subshell e não é visível no shell pai. Pelo contrário, { ... } executa código no shell atual, afetando suas variáveis.

    
por 20.01.2015 / 09:46
1

Como você disse: ( ) causa um subshell. { ;} não. É por isso que os resultados são diferentes. O { ;} não faz sentido para comandos únicos. É um recurso de agrupamento.

    
por 20.01.2015 / 09:46