cria um arquivo XML usando o script bash

1

Eu quero criar um arquivo xml simples usando o script bash (não com dom)

mas quando eu defino o valor na linha então echo imprime a palavra $ lorem e não o val

lorem = LOL

echo '<root><foo a="b">$lorem</foo><bar value="ipsum" /></root>' >> $MY_XML

Eu também tento isso

echo '<root><foo a="b">\$lorem</foo><bar value="ipsum" /></root>' >> $MY_XML

echo '<root><foo a="b">"$lorem"</foo><bar value="ipsum" /></root>' >> $MY_XML

echo '<root><foo a="b">\"$lorem\"</foo><bar value="ipsum" /></root>' >> $MY_XML

mas todos estes imprimem exatamente a linha e não o val

por favor, como imprimir o val $ lorem? como o exemplo a seguir

 <root><foo a="b">LOL</foo><bar value="ipsum" /></root>
    
por maihabunash 09.02.2015 / 09:28

3 respostas

4

Imprima a linha desta maneira:

echo '<root><foo a="b">'"$lorem"'</foo><bar value="ipsum" /></root>' >> "$MY_XML"

Isso é necessário porque aspas simples negam o interpretador de shell de substituir variáveis de ambiente dentro

    
por 09.02.2015 / 09:36
3

Frustrantemente, talvez, uma das combinações que você omitiu teria funcionado:

echo "<root><foo a=\"b\">$lorem</foo><bar value=\"ipsum\" /></root>" >> $MY_XML

Aspas simples deixam tudo exatamente como você digita. Escapar com \ não funcionará. Aspas duplas avaliarão a string. Dentro de aspas duplas, você pode usar \ para escapar de caracteres específicos (incluindo o próprio caractere de aspas duplas).

Você também pode combinar partes da string que são citadas de maneiras diferentes. Aqui, $lorem permanece com aspas duplas, mas o restante da string está entre aspas simples:

echo '<root><foo a="b">'"$lorem"'</foo><bar value="ipsum" /></root>' >> $MY_XML
    
por 09.02.2015 / 10:25
2

Use um documento in-line com cat

cat >destfile <<EOF
<your ZML here...where $vas expand happly>
but the rest remain as is
EOF

Eu usei isso em muitos scripts

    
por 09.02.2015 / 11:28