解析文件以确定要使用的值

解析文件以确定要使用的值

我有一个脚本和一个从中提取变量的“配置”文件。我创建了名为 config.cfg 的配置文件,并在我的脚本中使用它,如下所示:

#! /bin/bash

if [ -f ./config.cfg ]
   then 
       source ./config.cfg
   else
       exit

配置文件包含许多不同的内容,例如

title="Foo Bar - The Untold Story"
desc="This is a verbose description of Foo Bar's Untold Story"
author="S. Nafu"
date="01/01/1932"
image_url="./path_to_image/foo.bar.jpg"
image_link="http://www.foo.bar/foo_bar"

到目前为止,一切正常,因为我可以(在脚本中)发出命令:

echo $title

并得到

Foo Bar - The Untold Story

我正在努力实现什么

我想根据这些字段和属性创建一个 XML 文件。理想情况下,想要解析文件并确定变量是否已声明,而不是它是否有值。所以...这是我想出的代码:

function writeln 
{
   local attrib=$1
   local value=$2
   local fmt="%s%s%s\n" 
   printf $fmt "<$attrib>$value</$attrib>"
}

function writeChannel
{
    local fmt="%s\n"
    printf $fmt "<channel>"
    while read line
    do
        local xml_attrib=`echo $line | cut -d "=" -f1`
        local xml_value=`echo $line | tr -d '"' | cut -d "=" -f2`
        writeln $xml_attrib $xml_value

    done < config.cfg

}

当我执行代码时,我得到了预期的结果:

<title>Foo Bar - the Untold Story</title>
<desc>This is a verbose description of Foo Bar's Untold Story</desc>
....

现在,我想做的是使用基于我解析的变量“标题”(假设我不知道变量名称是“标题”)

基本上,我想做的是xml_属性变量,将“$”连接到它,然后获取内容。所以,使用我的第一行配置文件文件,

xml_attrib = "title"

我如何将该字符串作为 var 来寻址并说

echo $title

有任何想法吗?

答案1

在 bash 中,您可以使用语法对变量进行间接寻址 ${!var}。例如

 a=x; b=a; echo "${!b}"  # gives you x

您可能喜欢的其他 bash-isms 可以替换,例如:

xml_attrib=`echo $line | cut -d "=" -f1`
xml_value=`echo $line | tr -d '"' | cut -d "=" -f2`

经过

xml_attrib=${line%%=*}
line=${line#*=}
xml_value=${line//\"/}

请参阅 bash(1),参数扩展。

相关内容