如何使用文件中先前定义的变量扩展变量

时间:2017-08-28 02:00:37

标签: bash

我有一个具有多个键值对的属性文件。某些值使用先前定义的键。以下是样本

  xpath=abc/temp.txt
  fullpath=$HOME/$xpath
  ...

我想逐行解析这个文件并打印行以及解析env变量(如$ HOME)以及之前定义的变量(如$ xpath

预期输出

  xpath=abc/temp.txt
  fullpath=tempuser/abc/temp.txt
  ...

如何在bash脚本中以这种方式扩展变量

2 个答案:

答案 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"

在上面的代码段中,使用evalecho来解释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禁用调试,但不输出