【发布时间】:2020-08-04 21:42:56
【问题描述】:
这是场景:
系统预设有以下环境变量:
INNER1=1
INNER2=2
INNER3=3
现在我有了文件:values.properties
OUTER1=$INNER1
OUTER2=$INNER2
OUTER3=$INNER3
我还有一个名为:run.sh
的shell脚本#!/bin/sh
PROPERTIES_FILE=values.properties
while IFS== read -r VAR1 VAR2
do
export $VAR1=$VAR2
done < $PROPERTIES_FILE
现在的问题是,当我运行脚本时,会导出以下内容:
OUTER1=$INNER1
OUTER2=$INNER2
OUTER3=$INNER3
但期望的结果应该是:
OUTER1=1
OUTER2=2
OUTER3=3
我希望它在导出时完全解析变量名。
【问题讨论】:
-
为什么要把事情复杂化?只需
. values.properties -
如何运行该脚本?或者你在哪里使用导出的变量?
-
有关 bash 中间接扩展的广泛讨论,请参阅BashFAQ #6。也就是说,如果您相信您的数据是有效代码,我同意 Joseph 的观点,即您应该将其作为代码显式 运行(使用
.运算符,在 bash 中也以 @987654329 为别名@)。 -
@CharlesDuffy :虽然 OP 将其标记为 bash,但该脚本很可能不会作为 bash 脚本执行。不幸的是,OP 没有告诉我们他是如何运行脚本的,但假设他只是通过输入路径来运行它,它是由
sh运行的。 -
@user1934428,BashFAQ 还涵盖了 POSIX sh 和 ksh。