파일을 구문 분석하여 사용할 값을 결정합니다. [중복]

파일을 구문 분석하여 사용할 값을 결정합니다. [중복]

스크립트와 그로부터 변수를 추출하는 "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), 매개변수 확장을 참조하세요.

관련 정보