Bash Variablennamen zusammensetzen
-
Hallo Forum,
ich habe unterschiedliche Mengen an Eingabeparametern für ein Bash Skript. Ist $1 mit 1 belegt soll der erste Datensatz genommen werden, bei $2=2 der zweite, ...
Namen1 = "Albert", "Mia", "Franz", "Sabine"
Namen2 = "Mulli", "Miriam", "Fal", "Sai"NamesArray = (${Namen$1})
Im Internet steht ich müsse ! davor schreiben um die Variable neu zu interpretieren. Es funktioniert aber trotzdem nicht?
Alternativ: Kann ich auch irgendwie ein Namensarray mit mehreren Strings erstellen?Vielen Dank
Tim
-
eval echo \$Namen$1
-
Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Themen rund um den PC in das Forum Rund um die Programmierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Danke Rüdiger
-
rüdiger schrieb:
eval echo \$Namen$1
Das ist eine sehr gefährliche Lösung.
Folgendes Skript nenne ich foo.sh:
#!/bin/bash Namen1="eins" Namen2="zwei" echo "Mit Hilfsvariable..." indirect=Namen$1 echo "${!indirect}" echo "Mit eval..." eval echo \$Namen$1
Ausführen:
$ % ./foo.sh 1 Mit Hilfsvariable... eins Mit eval... eins $ % ./foo.sh 2 Mit Hilfsvariable... zwei Mit eval... zwei $ ./foo.sh '$(date)' Mit Hilfsvariable... Mit eval... Tue Jun 29 23:14:12 CEST 2010 $
Wie die letzte Zeile zeigt, handelst du dir damit Sicherheitslücken ein.
Du kannst Variablen mit der Form ${!indirect} referenzieren, aber dafür musst du eine Hilfsvariable anlegen, sonst geht das nicht. Ich würde aber auf jeden Fall eval vermeiden, wenn möglich.