在 Bash 中的函数内部使用声明

发布于 2024-12-06 03:18:01 字数 341 浏览 1 评论 0原文

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

input="Hello"
example=input    

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

func
echo $input

其输出将是“Hello”的原始值。如果该函数能够更改原始值,我希望它。有没有其他方法可以完成此任务。请注意,我需要设置 example=input 然后对 example (变量)执行操作。

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

I am want to change a global variable (or at least append to it) using a function.

input="Hello"
example=input    

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

func
echo $input

The output of this would be "Hello" The original value. I would like it if the function were to able to change the original value. Is there alternative to accomplishing this. Please note I need to set example=input and then perform on the operation on example (the variable).

BTW, if I used eval instead the function will complain about World being a function or something.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

烟─花易冷 2024-12-13 03:18:01

您尝试过使用导出吗?

export $example="${input} World"

Did you try using export?

export $example="${input} World"
深白境迁sunset 2024-12-13 03:18:01

使用

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

你应该在你的func

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

请参阅

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

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

you should use

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

in your func

The -g option forces variables to be created or modified at the global scope, even when declare is executed in a shell function. It is ignored in all other cases.

see

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

Also note in MinGW, it seems that declare does not support the -g option.

早茶月光 2024-12-13 03:18:01

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

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

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

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

export -n $example=...

,并且该变量仍然是 shell 变量并且不会得到导出为环境变量。

You could use eval by redefining func() as the following:

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

This allows the double-quotes to "survive" the first parsing (which expands the variables into their values, as needs to be done) so that eval starts parsing again with the string 'input="Hello World".

As for the use of export to do the job, if the variable input does not actually need to be exported, include its '-n' option:

export -n $example=...

, and the variable remains a shell variable and does not get exported as an environment variable.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文