スクリプトとそれから変数を抽出する "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), パラメータ拡張を参照してください。