在Bash中使用函数声明

时间:2011-09-21 21:06:29

标签: bash shell global-variables

我想使用函数更改全局变量(或至少附加到它)。

input="Hello"
example=input    

func() {
    declare -x $example="${input} World"
}

func
echo $input

这个输出将是“Hello”原始值。如果函数能够更改原始值,我希望它。有没有替代实现这一点。请注意我需要设置example=input,然后对示例(变量)执行操作。

顺便说一句,如果我使用eval而不是函数会抱怨世界是一个函数或什么的。

3 个答案:

答案 0 :(得分:2)

您尝试使用导出吗?

export $example="${input} World"

答案 1 :(得分:1)

你应该使用

declare -x -g $example="${input} World"

func

  

-g选项强制在全局范围内创建或修改变量,即使在shell函数中执行declare也是如此。在所有其他情况下都会被忽略。

http://www.gnu.org/software/bash/manual/bashref.html

另请注意,在MinGW中,似乎declare不支持-g选项。

答案 2 :(得分:0)

您可以通过重新定义func()来使用eval,如下所示:

func() {
    eval $example=\"${input} World\"
}

这允许双引号“幸存”第一次解析(将变量扩展为它们的值,需要完成),以便eval再次使用字符串'input =“Hello World”开始解析。

至于使用export来完成工作,如果实际上不需要导出变量输入,请包含其'-n'选项:

export -n $example=...

,变量仍然是shell变量,不会作为环境变量导出。