variable linux bash variables cat

linux - BASH: las variables globales no son actualizables en una función solo cuando esa función está canalizada(ejemplo simple)



bash cat to variable (1)

Una pipa crea una subshell. En el manual de bash se dice que las subshells no pueden modificar el entorno de sus padres. Vea estos enlaces:

http://www.gnu.org/software/bash/manual/bashref.html#Pipelines

http://wiki.bash-hackers.org/scripting/processtree#actions_that_create_a_subshell

Esto huele a buggy, pero probablemente, alguien puede explicarlo:

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"

Salida:

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

Ahora, sólo quítate el | cat | 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