这闻起来有问题,但也许有人可以解释一下:
以下脚本不起作用,输出如下:
#!/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
最佳答案
管道创建子外壳。在bash manual中说子外壳不能修改其 parent 的环境。请参阅这些链接:
http://www.gnu.org/software/bash/manual/bashref.html#Pipelines
http://wiki.bash-hackers.org/scripting/processtree#actions_that_create_a_subshell
关于linux - BASH:只有当函数被管道传输时,全局变量才在函数中不可更新(简单示例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6662915/