Warum +=1 beim Hochzählen einer Variablen? (Linuxserveradministration Anfängerfrage)?
Hallo an Alle,
ja, der Linuxserveradministrationlernende versteht mal wieder etwas nicht. Ich bin momentan bei Arrays, bei der durch eine for-Schleife der Inhalt eines Arrays ausgegeben werden soll.
Im Buch wird der Code (ich beschränke mich hier der Einfachheithalber nur auf die erste Zeile) aufgeführt:
for ((i=0; i< ${#LISTE[@]}; i +=1))
Was ich bisher davon verstanden habe: Die doppelten sich öffnenden Klammern leiten eine Rechenoperation ein. Das for ((i = 0) sorgt dafür, dass die Variable i am Anfang auf 0 gesetzt wird, was aber beim Durchlaufen der Schleife das einzige Mal passiert.
Danach wird geprüft, ob die Variable i kleiner ist als alle Elemente in der Variablen LISTE.
Mit i +=1 soll die Variable i jeweils um einen erhöht werden. Aber - und da suche ich gerade den Missing Link - wieso dann das Gleichheitszeichen? Müsste es nicht einfach heißen i + 1?
Ich nutze auf dem Server Linux Ubuntu 22.04 LTS (falls das eine Info ist, die dafür gebraucht wird)
Für die Antworten bedanke ich mich im Voraus.
GLG
Tichuspieler
3 Antworten
i += 1 ist die Kurzform für i = i+1
i+1 würde i ja nicht vergrößern daher die Zuweisung mit dem =
Du schreibst im wesentlichen einzelne Operationen.
i + 1 liefert zunächst mal nur ein Ergebnis es steht aber nicht was mit diesem Ergebnis passieren soll.
Das was du eigentlich willst ist es der Variable i einen Wert zuzuweisen welcher um 1 größer ist als i zu diesem Zeitpunkt, daher stehen da auch zwei Operationen zum einen.
i + 1
und anschließend die Zuweisung dieses Wertes an i.
Du kannst auch die lange Form schreiben, syntaktisch sollte da denke ich nichts dagegen sprechen.
Dann habe ich es verstanden :-) Vielen lieben Dank für Deine Hilfe :-) :-)
Es ist eine Zuweisung gemischt mit einem Operator. Damit sagst du quasi, dieser Variable soll ihr eigener Wert plus das was hinter dem Operator steht zugewiesen werden.
Wenn es nur um das senken und erhöhen von Variablen geht gibt es in vielen Sprachen auch i++ oder i--
Vielleicht machen die beiden Ausgaben den Sinn der Angabe "+=#" klarer. De-facto sagt das nämlich um wie viel hochgezählt werden soll (und wer nur um eins hochzählen will kann auch nur "i++" schreiben)
+=2
$:~> for ((i=0;i<11;i+=2)); do echo $i; done
0
2
4
6
8
10
+=4
$:~> for ((i=0;i<11;i+=4)); do echo $i; done
0
4
8
Anmerkung: Alles was ich über Shell-Skripting schreibe bezieht sich auf die Bourne Again Shell (bash) und teste ich damit. Andere Shells können andere Ergebnisse produzieren.
Heiho,
erst einmal Danke für Deine Antwort.
Das mit der Kurzform (darf ich eigentlich auch die Langform bei einer solchen Aufgabe schreiben? Für mich wäre das einfacher zu verstehen) verstehe ich. Wenn ich Deinen zweiten Satz richtig deute, steht das i+1 sozusagen im luftleeren Raum. Es braucht das Gleichheitszeichen dafür, dass i+1 weiß, zu wem es gehört.
Habe ich das richtig interpretiert? Oder ist da noch ein Denkfehler in meinem Kopf?