从子shell设置值到全局变量

时间:2015-08-15 14:52:24

标签: bash function shell global-variables zsh

代码示例main.zsh

#!/usr/bin/env zsh

. ./my_script.zsh

my_global_var=""

output=$(my_func)

代码示例my_script.zsh

#!/usr/bin/env zsh

my_func(){
    my_global_var="hello!" # doesn't work!
    echo "my output" # return value
}

在这种情况下,如何在子shell中将my_global_var的值设置为my_func。我在这里尝试做的,我只是尝试在zsh中实现一个能够通过变量替换机制$()返回值的函数概念,但问题是如果我以这种方式实现它,我将无法从我的函数访问全局变量。我现在很困惑,也许我错误地在zsh中实现了一个函数概念。

1 个答案:

答案 0 :(得分:2)

你做不到。 my_func在一个单独的流程中运行,因此无论它对my_global_var执行什么操作都属于该流程的本地流程,main.zsh都看不到。您的函数可以用于设置全局变量或输出要由$(...)捕获的文本,而不是两者。