我想使用函数更改全局变量(或至少附加到它)。
input="Hello"
example=input
func() {
declare -x $example="${input} World"
}
func
echo $input
这个输出将是“Hello”原始值。如果函数能够更改原始值,我希望它。有没有替代实现这一点。请注意我需要设置example=input
,然后对示例(变量)执行操作。
eval
而不是函数会抱怨世界是一个函数或什么的。
答案 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变量,不会作为环境变量导出。