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