使用eval导出变量不能按预期工作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用eval导出变量不能按预期工作相关的知识,希望对你有一定的参考价值。

我有一个带有变量导出的文件,如下所示:

$ cat file.txt
export A=foo
export B="B-$A" # I want export another var, which depends on a previously exported var

使用eval执行这些语句不会产生预期的行为:

$ eval $(cat file.txt)
$ echo ${B:-unset}
unset

当不使用export时,它按预期工作:

$ eval $(echo "A=foo B="B-$A"")
$ echo ${B:-unset}
B-foo

为什么差异,有没有办法实现相同的结果而不从变量export中删除A(该文件的一部分来自我控制之外的外部源,但我可以更改变量B)?

答案

首先,将file.txt更改为此(并考虑将其命名为file.sh):

export A=foo
export B="B-$A"

然后,而不是eval $(cat file.txt),这样做:

source file.txt

这就像你将内容file.txt粘贴到shell中一样。

以上是关于使用eval导出变量不能按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

从递归函数修改全局变量不能按预期工作

将代码从 ES5 转换为 ES6 并导出未按预期工作

将代码从 ES5 转换为 ES6 并导出未按预期工作

重新编码数据框变量时,分配没有按预期工作?

使用 savedInstanceState 保存片段状态

为啥使用 Vue 编辑数据不能按预期工作