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

时间:2018-02-28 11:39:03

标签: bash environment-variables

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

$ 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)?

1 个答案:

答案 0 :(得分:2)

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

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

然后,代替eval $(cat file.txt),执行此操作:

source file.txt

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