2012-01-16 151 views
5

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

如果我直接在命令中设置变量 - 例如,VARNAME=VARVAL script_name - 它运作良好。但是,由于我想根据不同的条件设置多个变量,我想使用本地函数变量来存储环境变量设置,然后在脚本执行命令中使用此变量。 我有一个本地“变量”变量,最终设置,例如,到VARNAME=VAR,但如果我尝试从我的bash函数运行${vars} script_name,我得到一个“命令未找到”错误$ vars变量赋值 - 即$ vars的内容被解释为一个命令,而不是作为环境变量分配。

我尝试了命令语法的不同变体,但至今无济于事。 目前,我必须在调用脚本之前在函数中导出相关变量,然后将它们重置为以前的值,但这并不是我所希望的解决方案。

任何帮助将不胜感激。

感谢, 沙龙

回答

3

评估您的变量的内容作为一种表达,而不是作为一个命令,你可以尝试使用eval

eval ${vars} script_Name 
+0

感谢您的及时回复。有效 :-)! (我实际上在某个时候尝试了使用eval,但我意外地使用了错误的语法。) – Sharon 2012-01-16 10:37:50

+0

['eval' is evil](http://mywiki.wooledge.org/BashFAQ/048) – l0b0 2014-02-28 16:32:10

2

然而,因为我想设置多个变量,基于不同的 条件,我想用一个本地函数变量来存储 环境变量设置,然后在 脚本执行中使用这个变量n命令。

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

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

这也有被safer than eval的优势。

+1

我不知道如何这对我有帮助。我事先不知道需要为脚本设置哪些变量值。我在运行时通过解析传递给bash函数的标志来确定它。这就是为什么我使用一个变量 - 我使用基于功能选项解析的环境变量分配更新本地变量,然后在调用脚本时使用局部变量。再次,使用“eval”这个效果很好。请注意,我不想在调用bash函数时设置环境变量,因为我想使用更简单的函数标志。 – Sharon 2012-02-11 19:18:45