Using Declare Inside a Function in Bash

拥有回忆 提交于 2020-01-15 03:34:13

问题


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.


回答1:


Did you try using export?

export $example="${input} World"



回答2:


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.




回答3:


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.



来源:https://stackoverflow.com/questions/7506644/using-declare-inside-a-function-in-bash

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!