我有一个带有变量导出的文件,如下所示:
$ 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中一样。