BASH:仅当函数通过管道传输时,全局变量在函数中不可更新(简单示例)
Posted
技术标签:
【中文标题】BASH:仅当函数通过管道传输时,全局变量在函数中不可更新(简单示例)【英文标题】:BASH: Global variables aren't updateable in a function only when that function is piped (simple example) 【发布时间】:2011-10-03 12:34:34 【问题描述】:这闻起来很臭,但可能有人可以解释一下:
以下脚本不起作用,输出如下:
#!/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
【问题讨论】:
【参考方案1】:管道创建子外壳。在bash manual 中说子shell 不能修改其父母的环境。请参阅以下链接:
http://www.gnu.org/software/bash/manual/bashref.html#Pipelines
http://wiki.bash-hackers.org/scripting/processtree#actions_that_create_a_subshell
【讨论】:
以上是关于BASH:仅当函数通过管道传输时,全局变量在函数中不可更新(简单示例)的主要内容,如果未能解决你的问题,请参考以下文章
通过回声管道将python变量(字符串)传递给bash命令[重复]