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