2011-07-12 4 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 

答えて