在Bash中的函数中使用Declare

在Bash中的函数中使用Declare,bash,shell,global-variables,Bash,Shell,Global Variables,我想使用函数更改一个全局变量(或至少附加到它) input="Hello" example=input func() { declare -x $example="${input} World" } func echo $input 这个函数的输出将是原始值的“Hello”。如果函数能够更改原始值,我希望它。除了完成这一点,还有其他选择吗。请注意,我需要设置example=input,然后对example(变量)执行操作 顺便说一句,如果我用eval代替,函数会抱怨世界是一

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

input="Hello"
example=input    

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

func
echo $input
这个函数的输出将是原始值的“Hello”。如果函数能够更改原始值,我希望它。除了完成这一点,还有其他选择吗。请注意,我需要设置
example=input
,然后对example(变量)执行操作


顺便说一句,如果我用
eval
代替,函数会抱怨世界是一个函数或其他东西

您是否尝试使用导出

export $example="${input} World"

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

func() {
    eval $example=\"${input} World\"
}
这允许双引号在第一次解析中“存活”(根据需要将变量扩展为其值),以便eval使用字符串“input=”Hello World再次开始解析

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

export -n $example=...
,并且该变量仍然是shell变量,不会作为环境变量导出。

您应该使用

declare -x -g $example="${input} World"
在您的
func

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


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

使用
eval
通常是不受欢迎的,因为如果您有任何不受信任的用户输入,它会使您面临命令注入攻击。。。。如果有更好的办法。猛击