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

5
我有一个 Unix bash 函数,可以执行解析自定义环境变量的脚本。我想避免在 bash 中导出相关变量,而是仅为脚本设置它们,作为执行命令的一部分。
如果我直接在命令中设置变量 - 例如,VARNAME=VARVAL script_name - 它可以正常工作。然而,由于我想根据不同条件设置多个变量,我想使用本地函数变量来存储环境变量设置,然后在脚本执行命令中使用此变量。
我有一个名为“vars”的本地变量,最终被设置为 VARNAME=VAR,但如果我尝试从我的 bash 函数运行 ${vars} script_name,我会得到“未找到命令”的错误,即 $vars 变量分配的内容被解释为命令而不是环境变量分配。
我尝试了不同的命令语法变化,但目前为止都没有成功。目前,我必须在调用脚本之前在函数中导出相关变量,然后取消设置/重置它们以恢复先前的值,但这并不是我希望的解决方案。
非常感谢您的任何帮助。
谢谢, Sharon
2个回答

3

如果你想将变量的内容视为表达式而非命令,可以尝试使用eval

eval ${vars} script_Name

非常感谢您的及时回复。它成功了:-)!(事实上,我曾尝试过使用eval,但不小心使用了错误的语法。) - Sharon

2
然而,由于我想根据不同的条件设置多个变量,我想使用本地函数变量来存储环境变量设置,然后在脚本执行命令中使用这个变量。
您不需要将变量存储在单独的变量中。您可以为一个命令分配多个变量。
$ cat test.sh 
#!/usr/bin/env bash
echo "$foo"
echo "$bar"
$ foo=abc bar=def ./test.sh 
abc
def

这也有一个优点,就是比起使用 eval 更加安全

1
我不确定这对我有什么帮助。我事先不知道脚本需要设置哪些变量值。我通过解析传递给Bash函数的标志来在运行时确定这一点。这就是为什么我使用一个变量--我根据函数选项解析更新本地变量与环境变量分配,然后在调用脚本时使用本地变量。再次强调,对此使用“eval”效果很好。请注意,我不想在调用Bash函数时设置环境变量,因为我想使用更简单的函数标志。 - Sharon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接