Stokker: Variablen unter Shell-Script

Ich habe ein Problem, dass hoffentlich jemand lösen kann.

Ich habe eine Variable definiert, die die Namen von mehreren Variablen enthält (getrennt durch Leerzeichen). Jetzt möchte ich in einer Schleife einer Funktion die Inhalte all dieser Variablen ausgeben:

VARS="VARIABLE1 VARIABLE2 VARIABLE2"

VARIABLE1="Text1"
VARIABLE2="Wert2"
VARIABLE3="URL3"

function show_variables
{
    while [ ! -z "$1" ] ; do
        echo ${$1}
        shift
    done
}

show_variables VARS

So funktioniert das ganze natürlich nicht. Wie muss ich nach dem echo die Referenz angeben?

Stokker

  1. Ich habe ein Problem, dass hoffentlich jemand lösen kann.

    Ich habe eine Variable definiert, die die Namen von mehreren Variablen enthält (getrennt durch Leerzeichen). Jetzt möchte ich in einer Schleife einer Funktion die Inhalte all dieser Variablen ausgeben:

    VARS="VARIABLE1 VARIABLE2 VARIABLE2"

    VARIABLE1="Text1"
    VARIABLE2="Wert2"
    VARIABLE3="URL3"

    function show_variables
    {
        while [ ! -z "$1" ] ; do
            echo ${$1}
            shift
        done
    }

    show_variables VARS

    So funktioniert das ganze natürlich nicht. Wie muss ich nach dem echo die Referenz angeben?

    Stokker

    Hi Stokker,

    erstmal zum Funktionsaufruf...
    show_variables $VARS bewirkt bei der Übergabe $1=VARIABLE1; $2=VARIABLE2; $3=VARIABLE3;
    show_variables "$VARS" bewirkt bei der Übergabe $1="VARIABLE1 VARIABLE2 VARIABLE3"

    jetz mal das Beispiel mit "$VARS":

    --- snip ---

    #!/bin/bash

    VARS="VARIABLE1 VARIABLE2 VARIABLE3"

    VARIABLE1="Text1"
    VARIABLE2="Wert2"
    VARIABLE3="URL3"

    function show_variables
    {
       for i in $1; do
          eval TEMPVAR=${$i}
          echo $TEMPVAR
       done
    }

    show_variables "$VARS"

    --- snap ---

    Bei der Ausgabe musst du (meines Wissens) den Umweg über eine "Hilfsvariable" gehen... dies macht man mit eval...

    Falls es auch anders geht lasse ich mich gerne eines besseren belehren ;-)

    Gruss, Wirowax