glaskugel
Anmeldungsdatum: 8. Juli 2010
Beiträge: 3614
|
Nehmen wir an es gibt einen Zähler i, der durch eine Schleife erhöht wird. Nun soll bei i=1 eine Variable var1 als Variable definiert werden danach in jeder Schleife der Variablenname am Ende durch den Zähler angepasst werden, also in etwa so: #var$i= funktioniert nicht
var1=...
var2=...
var3=... Der Inhalt der Variable ist dann ein sed-Konstrukt mit unterschiedlichen Zeilen einer anderen Variable, soll aber egal sein.
|
micneu
Anmeldungsdatum: 19. Januar 2021
Beiträge: 705
Wohnort: Hamburg
|
Wo ist jetzt das Problem?
i=1; y=0; for x in {A..D}; do echo "$x -- $i"; y=$x$i; echo "$y"; i=$((i + 1)); done
code getestet unter macOS PS: Du hast über 3000 Beiträge, du musst doch schon lange ein Profi sein, im Vergleich zu dir bin ich ja noch ein Einsteiger
|
Kreuzschnabel
Anmeldungsdatum: 12. Dezember 2011
Beiträge: 1345
|
glaskugel schrieb:
var1=...
var2=...
var3=...
Spricht was dagegen, einfach ein Array zu verwenden? Das ist doch einklich für „durchzählbare“ Variablenfelder gedacht. var[1]=
var[2]=
var[3]= --ks
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 13131
|
glaskugel schrieb:
Der Inhalt der Variable ist dann ein sed-Konstrukt mit unterschiedlichen Zeilen einer anderen Variable, soll aber egal sein.
Was genau hast Du vor?
|
CarstenHa
Anmeldungsdatum: 1. Mai 2020
Beiträge: 138
|
Du möchtest wahrscheinlich sowas in der Art haben, oder?
| #!/bin/bash
for i in {1..3}; do
eval var$i="'Nr: ${i}'"
done
echo "$var1"
echo "$var2"
echo "$var3"
|
Gruß Carsten
|
CarstenHa
Anmeldungsdatum: 1. Mai 2020
Beiträge: 138
|
Wenn du einen Counter in dein Schleifenkonstrukt einbinden möchtest, dann geht das zum Beispiel so:
| counter=0
for ...; do
let counter++
done
|
'...' musst du natürlich noch nach deinen Vorstellungen anpassen.
|
CarstenHa
Anmeldungsdatum: 1. Mai 2020
Beiträge: 138
|
Kreuzschnabel schrieb: glaskugel schrieb:
var1=...
> var2=...
> var3=...
Spricht was dagegen, einfach ein Array zu verwenden? Das ist doch einklich für „durchzählbare“ Variablenfelder gedacht. var[1]=
var[2]=
var[3]= --ks
Und eine weitere Möglichkeit, wie Kreuzschnabel es schon angedeutet hat:
| #!/bin/bash
# Dasselbe Ergebnis mit assoziativem Array.
for i in {1..3}; do
var["$i"]="Nr: ${i}"
done
echo "${var[1]}"
echo "${var[2]}"
echo "${var[3]}"
|
P.S. Frohes neues Jahr Euch allen ☺
|
frostschutz
Anmeldungsdatum: 18. November 2010
Beiträge: 7777
|
Dynamische Variablennamen kannst du unter Bash mit declare benutzen. Sonst eben als Array. In anderen Shells kann man auch die positionalen Parameter $1 $2 $3 wie ein Array verwenden (mit set ). Manchmal reicht das.
|
CarstenHa
Anmeldungsdatum: 1. Mai 2020
Beiträge: 138
|
frostschutz schrieb: Dynamische Variablennamen kannst du unter Bash mit declare benutzen. Sonst eben als Array. In anderen Shells kann man auch die positionalen Parameter $1 $2 $3 wie ein Array verwenden (mit set ). Manchmal reicht das.
Jo stimmt. Das mit declare ist wohl die beste Lösung.
| for i in {1..3}; do
declare var$i="Nr: ${i}"
done
echo "$var1"
echo "$var2"
echo "$var3"
|
eval kann ja auch sehr schnell tricky werden.
|
glaskugel
(Themenstarter)
Anmeldungsdatum: 8. Juli 2010
Beiträge: 3614
|
eval kann ja auch sehr schnell tricky werden.
So ist es, verwende ich schon im umgekehrten Fall Ein Array, ist auch nicht ohne, wenn man es nach Jahren verstehen will Ein Array wäre programmiertechnisch sicher am effektivsten.
Was genau hast Du vor?
Weiß ich selber noch nicht, sorry für die Antwort. Ich habe ein altes Script, das ich neu schreiben will, weil sich an den Voraussetzungen soooo viel geändert hat und die Anpassungen funktionieren, aber schwer zu verstehen sind. Ich weiß noch nicht was ich rauswerfe, etc. Ich fange einfach mal an. Die Frage hat sich erübrigt. Ich habe eine simplere Logik ohne dieser automatischen Variablennummerierung gefunden. Ich blicke nach Jahren besser durch, wenn es nicht zu kurz ist. So Variablen, die durch mehrere andere Variablen verschachtelt sind, können ganz schön schwierig zu verstehen sein, wenn etwas unerwartet nach Anpassung der Bedingungen nicht wie gewünscht funktioniert. Der Haken liegt im Detail, zB bei sed, wenn die Variable / enthält, muss man die ein 2. Mal für sed gequotet erstellen und für den sed-Befehl " statt ' verwenden, etc. Danke
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 13131
|
glaskugel schrieb:
Ein Array wäre programmiertechnisch sicher am effektivsten.
Auf jeden Fall.
Was genau hast Du vor?
Weiß ich selber noch nicht, sorry für die Antwort.
Oh.
Ich habe ein altes Script, das ich neu schreiben will, weil sich an den Voraussetzungen soooo viel geändert hat und die Anpassungen funktionieren, aber schwer zu verstehen sind. Ich weiß noch nicht was ich rauswerfe, etc. Ich fange einfach mal an.
Immerhin hast Du eine Version, an der Du gelernt hast, und kannst jetzt besser planen. Erinnert mich an den "Mythical Man Month" von Fred Brooks, der die Maxime vorgeschlagen hat "plan to throw one away": man baut eine Version und lernt dabei, wie es besser geht. Dann schmeißt man die erste Version weg und baut eine zweite Version.
|
Kreuzschnabel
Anmeldungsdatum: 12. Dezember 2011
Beiträge: 1345
|
glaskugel schrieb:
Ein Array, ist auch nicht ohne, wenn man es nach Jahren verstehen will Ein Array wäre programmiertechnisch sicher am effektivsten.
Um seinen eigenen Code nach Jahren noch bzw. wieder zu verstehen, bietet jede höhere Sprache die Möglichkeit, Kommentare reinzuschreiben ☺ nichts für echte™ Männer, ist klar. --ks
|
Marc_BlackJack_Rintsch
Ehemalige
Anmeldungsdatum: 16. Juni 2006
Beiträge: 4658
Wohnort: Berlin
|
Naja, Kommentare sind für Sachen die nicht in der Dokumentation stehen, nicht für so grundlegende Dinge wie # Das hier ist ein Array und das funktioniert folgendermassen… . Für Sprachkonstrukte schreibt man sich besser einen Spickzettel, neudeutsch Cheatsheet, oder sucht sich so etwas fertig im Netz. Wobei beim selber schreiben der Lerneffekt in der Regel höher ist.
|
Dakuan
Anmeldungsdatum: 2. November 2004
Beiträge: 6467
Wohnort: Hamburg
|
Das mit den Kommentaren kenne ich. Ich musste Anfangs der 70-er Jahre mein erstes Fortran IV Programm abliefern. Kommentare waren da eher lästig. Inzwischen habe ich aber erkannt, dass die wirklich nötig sind. Ich kämpfe auch bei aktuellen Programmen, nach kurzer Zeit, immer wieder mit fehlenden Informationen, die ich dann nachliefern muss. Aktuell habe ich aber das Problem, dass man für manche Dokumentationen eigentlich Zeichnungen (Diagramme) benötigt, die man aber schlecht als Kommentar einfügen kann. Fazit: egal wie man es angeht, gute Dokumentation bleibt ein Problem.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 13131
|
Dakuan schrieb:
Aktuell habe ich aber das Problem, dass man für manche Dokumentationen eigentlich Zeichnungen (Diagramme) benötigt, die man aber schlecht als Kommentar einfügen kann.
doxygen kennst Du?
Fazit: egal wie man es angeht, gute Dokumentation bleibt ein Problem.
Eine der ewigen Wahrheiten der Softwareentwicklung. Kein Wunder, denn die Doku hinkt immer hinterher. Oder macht die KI das jetzt mit Links? 😉
|