2011-07-12 16 views
17

这气味越野车,但也许,有人能解释一下:BASH:全局变量是不可更新的功能,只有当该功能正在管道(简单的例子)

下面的脚本不能正常工作,输出低于:

#!/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" 

输出:

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

现在,只需起飞| cat,它的工作原理!

#!/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" 

输出:

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

回答