我有一个具有多个键值对的属性文件。某些值使用先前定义的键。以下是样本
xpath=abc/temp.txt
fullpath=$HOME/$xpath
...
我想逐行解析这个文件并打印行以及解析env变量(如$ HOME)以及之前定义的变量(如$ xpath
预期输出
xpath=abc/temp.txt
fullpath=tempuser/abc/temp.txt
...
如何在bash脚本中以这种方式扩展变量
答案 0 :(得分:1)
如果您想逐行解析并解释变量,您可能希望使用eval
来评估字符串,例如:
while IFS='=' read -r key value
do
key=$(echo $key | tr '.' '_')
if [[ ! -z $key ]]
then
v=`eval "echo ${value}"`
eval "${key}='${v}'"
echo "${key}=${v}"
fi
done < "my.properties"
在上面的代码段中,使用eval
和echo
来解释variables
。
答案 1 :(得分:0)
由于分配是有效的bash,source settings.env
足以评估它们。但是,您还需要打印作业,因此需要更多的技巧:
PS4="\000" source <(echo 'set -x'; cat settings.env; echo '{ set +x; } 2>/dev/null')
这个技巧使用set -x
的bash调试工具来打印每个分配的输出。用语言:
PS4="\000"
删除调试提示,默认情况下为+
<()
通过括号中的管道set -x
启用调试cat settings.env
插入您的设置{ set +x; } 2>dev/null
禁用调试,但不输出