在本地bash函数变量中设置脚本的环境变量

在本地bash函数变量中设置脚本的环境变量,bash,unix,cygwin,environment-variables,Bash,Unix,Cygwin,Environment Variables,我有一个unixsbash函数,它执行一个脚本来解析自定义环境变量。我希望避免在bash中导出相关变量,而是仅为脚本设置它们,作为执行命令的一部分 如果我直接在命令中设置变量——例如,VARNAME=VARVAL script\u name——效果很好。但是,由于我希望根据不同的条件设置多个变量,因此我希望使用局部函数变量来存储环境变量设置,然后在脚本执行命令中使用此变量。 我有一个最终设置的本地“vars”变量,例如,VARNAME=VAR,但是如果我试图从bash函数运行${vars}scr

我有一个unixsbash函数,它执行一个脚本来解析自定义环境变量。我希望避免在bash中导出相关变量,而是仅为脚本设置它们,作为执行命令的一部分

如果我直接在命令中设置变量——例如,
VARNAME=VARVAL script\u name
——效果很好。但是,由于我希望根据不同的条件设置多个变量,因此我希望使用局部函数变量来存储环境变量设置,然后在脚本执行命令中使用此变量。 我有一个最终设置的本地“vars”变量,例如,
VARNAME=VAR
,但是如果我试图从bash函数运行
${vars}script\u name
,我会得到一个$vars变量赋值的“command not found”错误——即,$vars的内容被解释为一个命令,而不是环境变量赋值

我尝试了命令语法的不同变体,但到目前为止没有效果。 目前,我必须在调用脚本之前导出函数中的相关变量,然后将它们取消设置/重置为以前的值,但这并不是我真正希望的解决方案

任何帮助都将不胜感激

谢谢,
Sharon

要将变量的内容作为表达式而不是命令进行计算,您可以尝试使用:

但是,由于我想设置多个变量,基于不同的 条件下,我想使用一个局部函数变量来存储 环境变量设置,然后在 脚本执行命令

您不需要将变量存储在单独的变量中。可以为命令指定多个变量:

$ cat test.sh 
#!/usr/bin/env bash
echo "$foo"
echo "$bar"
$ foo=abc bar=def ./test.sh 
abc
def

这也有好处。

感谢您的及时回复。成功了:-)!(我确实在某个时候尝试过使用eval,但我不小心使用了错误的语法。)我不确定这对我有什么帮助。我事先不知道需要为脚本设置哪些变量值。我在运行时通过解析传递给bash函数的标志来确定这一点。这就是为什么我使用一个变量——我根据函数选项解析使用环境变量赋值更新局部变量,然后在对脚本的调用中使用局部变量。同样,使用“eval”进行此操作效果良好。注意,我不想在调用bash函数时设置环境变量,因为我想使用更简单的函数标志。
$ cat test.sh 
#!/usr/bin/env bash
echo "$foo"
echo "$bar"
$ foo=abc bar=def ./test.sh 
abc
def