ファイルを解析して使用する値を決定します。 [重複]

ファイルを解析して使用する値を決定します。 [重複]

スクリプトとそれから変数を抽出する "config"ファイルがあります。 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>
....

今私がしたいことは使用変数 "title"に基づいて解析します(変数名が "title"かどうかわからないと仮定します)。

基本的に私がやりたいことはxml_属性変数に「$」を連結して内容を取得します。だから最初の行を使って構成ファイル文書、

xml_attrib = "title"

その文字列をvarとして指定し、どのように言いますか?

echo $title

どんなアイデアがありますか?

ベストアンサー1

Bashでは、変数の構文間接参照を使用できます ${!var}。例えば

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

必要な他のbash-ismを置き換えることができます。たとえば、次のようになります。

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), パラメータ拡張を参照してください。

おすすめ記事