如何完全解析 bash/shell 脚本中的环境变量 [重复]
Posted
技术标签:
【中文标题】如何完全解析 bash/shell 脚本中的环境变量 [重复]【英文标题】:How do I fully resolve the environment variables in bash/shell scripting [duplicate] 【发布时间】: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。
【参考方案1】:
您需要使用shell parameter expansion。 #!/bin/sh
PROPERTIES_FILE=values.properties
while IFS== read -r VAR1 VAR2
do
export $VAR1="$!VAR2"
done < $PROPERTIES_FILE
您可能还需要将 values.properties 文件更改为:
OUTER1=INNER1
OUTER2=INNER2
OUTER3=INNER3
我希望这会有所帮助!
【讨论】:
在How to Answer 中,请参阅回答正确提出的问题 部分,以及其中关于“之前已经被多次询问和回答”的问题的要点。回答重复意味着人们不太可能在问题的规范实例上看到更完整和经过广泛审查的答案集。 (当然,如果已经存在的实例缺少某些内容,您应该感到鼓励在规范实例上添加新答案!)以上是关于如何完全解析 bash/shell 脚本中的环境变量 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
Linux操作系统基础解析之——Bash(Shell)基础知识