2011-07-12 12 views
17

Esto huele con errores, pero probablemente, alguien puede explicarlo:BASH: Las variables globales no son actualizables en una función sólo cuando se canaliza esa función (ejemplo sencillo)

La siguiente secuencia de comandos no funciona, la salida es a continuación:

#!/bin/bash 
GLOBAL_VAR="OLD" 
myfunc() { 
     echo "func before set> $GLOBAL_VAR" 
     GLOBAL_VAR="NEW" 
     echo "func after set> $GLOBAL_VAR" 
} 
myfunc | cat 
echo "final value> $GLOBAL_VAR" 

de salida:

func before set> OLD 
func after set> NEW 
final value> OLD 

Ahora, simplemente despega el | cat y funciona!

#!/bin/bash 
GLOBAL_VAR="OLD" 
myfunc() { 
     echo "func before set> $GLOBAL_VAR" 
     GLOBAL_VAR="NEW" 
     echo "func after set> $GLOBAL_VAR" 
} 
myfunc 
echo "final value> $GLOBAL_VAR" 

Salida:

func before set> OLD 
func after set> NEW 
final value> NEW 

Respuesta

Cuestiones relacionadas