Alguém pode me esclarecer sobre a variável global neste script de shell?

1

Aqui está o código.

#!/bin/bash
var_change() {
 local var1='local 1'
 echo Inside function: var1 is $var1 : var2 is $var2
 var1='changed again'
 var2='2 changed again'

}

var1='global 1'
var2='global 2'
echo Before function call: var1 is $var1 : var2 is $var2
var_change
echo After function call: var1 is $var1 : var2 is $var2

E aqui está a saída ao executar o script acima.

Before function call: var1 is global 1 : var2 is global 2
Inside function: var1 is local 1 : var2 is global 2
After function call: var1 is global 1 : var2 is 2 changed again

Dê uma olhada na última linha que é chamada de função após. Eu não entendo porque var2 aqui é "2 mudou novamente". Eu apenas pensei que fora da função var_change, a variável var2 deve ser global2.

    
por The One 12.04.2016 / 03:19

2 respostas

1

Na função, var2 não é declarado local e, portanto, é "global", o que significa que o valor que ele possui no final da função será o valor que ele possui após a chamada da função. .

Dito de forma diferente, a variável var1 dentro da função é "local" e, portanto, não é a mesma variável que a global com o mesmo nome, ao passo que este não é o caso de var2 .

    
por 12.04.2016 / 03:28
0

Adicionando

local var2='local 2'

para a função deve mudar isso.

    
por 12.04.2016 / 03:29