2017-08-28 88 views
1

我有一个属性文件具有多个键值对。一些值使用先前定义的键。以下是示例如何使用文件中的以前定义的变量扩展变量

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

我想解析由行此文件中的行并打印线,解决像$ HOME ENV变量一起以及先前定义的变量,比如$的XPath

预期输出

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

如何扩大在这样的变量bash脚本

+1

你想用这个做什么?感觉就像你要求解决方案中的一步可能不是最好的解决方案。 –

回答

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

+0

我希望将输出打印在终端上。你可以添加printf,这样我就能得到问题中所述的预期输出。 – Vivek

+0

您好@Vivek,对于输出,您可以使用'echo“$ {key} = $ {v}”'来达到此目的。 – chengpohi

+0

谢谢。最后一件事 - 它跳过最后一行 – Vivek

0

由于分配是有效的bash,source settings.env suffic以评估他们。但是,你也想要打印的作业,所以需要更多的挂羊头卖狗肉:

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禁用调试,而不输出它
+0

谢谢。但我想打印输出(整个文件)不只是评估变数 – Vivek

+0

我错过了这个要求。回答相应编辑。 – bishop

相关问题