2011-07-12 10 views
17

Lỗi này có mùi, nhưng có thể ai đó có thể giải thích:BASH: Biến toàn cục không thể cập nhật trong một hàm chỉ khi chức năng đó được đường ống (ví dụ đơn giản)

Tập lệnh sau không hoạt động, đầu ra là dưới đây:

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

Output:

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

Bây giờ, chỉ cần cất cánh | cat và nó hoạt động!

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

Output:

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

Trả lời

Các vấn đề liên quan