Variablen Variablen Werte zuweisen

0

Ich habe Probleme mit einer for-Schleife, ähnlich wie unten:

for VARIABLE in alpha bravo charlie; do
  $VARIABLE=`sed -n '/$VARIABLE/s///gp;' $FILE`
done

$ FILE könnte so etwas enthalten

alpha sandy
bravo cathy
charlie barbara

Erwartete Ergebnisse sollten sein ...

echo $alpha     # sandy
echo $bravo     # cathy
echo $charlie   # barbara

Leider erhalte ich Fehler:

bash: alpha=alpha: command not found
bash: bravo=alpha: command not found
bash: charlie=alpha: command not found
Felipe Alvarez
quelle

Antworten:

1

Sie bemerken es nicht, aber Sie müssen die innere Schleife jedes Mal zweimal durchlaufen lassen. Einmal, um den zuzuweisenden Variablennamen abzurufen, dann das zweite Mal, um die Zuweisung tatsächlich vorzunehmen. Das machst du mit eval. Ich bin zu ungeduldig, um dies jetzt zu debuggen, aber dies sollte ein Anfang sein:

for VARIABLE in alpha bravo charlie; do
  eval $VARIABLE=$(sed -n '/$VARIABLE/s///gp;' $FILE)
done

Im Allgemeinen müssen Sie möglicherweise $ s in Ihrer Zeile mit einem Escape-Zeichen versehen, je nachdem, ob die Variablen im ersten oder zweiten Durchgang ersetzt werden sollen. In Ihrem Fall macht es keinen Unterschied, außer dem ersten, und Sie möchten es beim ersten Aufruf.

Rich Homolka
quelle
Was hast du damit gemeint? need to escape $s in your line?
Felipe Alvarez
1

Damit Sie die Variablennamen nicht vorher kennen müssen, können Sie schreiben:

output=$(sed 's/ \+/="/;s/$/"/' "$FILE")
eval "$output"

echo $alpha     # sandy
echo $bravo     # cathy
echo $charlie   # barbara
glenn jackman
quelle