(Mal wieder) Fragen zur Linuxserver-Administration?
Hallo an Alle,
ich bin in meinem Lehrbuch zum Erlernen des Administrierens eines Linuxservers schon ein wenig weitergekommen, haben aber jetzt bei einem Punkt Nachfragen.
Ich bin gerade beim Thema Arrays, was zwar eigentlich noch gar nicht an der Reihe wäre, aber laut Aussage des Autors des Buches wird das Wissen, was er jetzt in Kapitel 4 beschreibt, für Kapitel 20 gebraucht und deswegen an der Stelle, an der ich bin, erklärt (fragt nicht. Den Sinn habe ich auch nicht verstanden).
Im Buch steht folgender Code:
for ((i=0; i<${ #LISTE[@]}; i+=1))
do
echo "Meine Datei: " ${LISTE[i]}
done
Was ich nicht verstehe:
1) Warum kommt in Zeile 1 nach dem for zweimal die runde Klammer am Anfang?
2) Laut meines Buches bezeichnet das @-Zeichen alle Elemente. Was bedeutet das?
2a) Ist das @-Zeichen generell für das Bezeichnen der Elemente gedacht oder wird es nur für diesen speziellen Code eingesetzt und könnte rein theoretisch auch zum Beispiel durch das Prozentzeichen ausgewechselt werden?
3) Laut meinem Lehrbuch ermittelt das Doppelkreuz vor LISTE die Anzahl der Elemente. Ist das so zu verstehen, dass ich ein Feld habe mit - sagen wir mal 20 Buchtitel als Inhalt - dass Linux weiß: Oh, ein # vor einem Feld, bevor ich weitermache, schaue ich erst mal nach, wie viele Elemente in dem Array sind?
4) Laut meinem Buch kann man Variablen auch klein schreiben, es wird aber darauf hingewiesen, dass sich die Linuxcommunity eher daran hält, sie groß zu schreiben, weil Linux von vornherein Variablen großgeschrieben hat.
Ist das kleine i nun als "Tippfehler" zu sehen oder hat es in diesem Fall einen Grund, dass es kleingeschrieben wird.
Ich weiß, viele Fragen, und wahrscheinlich sogar viele dumme Fragen, aber es wäre lieb, wenn mir jemand von Euch trotzdem beantworten kann.
Dafür sage ich schon einmal Danke im Voraus
GLG
Tichuspieler
1 Antwort
Moin
1.) Doppelte Runde klammern werden verwendet wenn irgendwelche Rechenoperationen stattfinden. In deinem fall z.B. "i wird jedes mal eins größer"
2.) array[*] und array[@] unterscheiden sich dadurch das * alle elemente des arrays anneinander reiht und @ jedes element einzeln betrachtet. Grob gesagt eine for schleife die über ein array[*] geht, bei dem das array "apfel birne orange" enthält, gibt bei einem echo auf "apfel birne orange" als ein wort aus, es wird also nur ein mal iteriert. array[@] würde erst apfel, dann birne, dann orange iterieren.
2a.) Das @ Zeichen ist immer kontextabhängig
3.) Wenn ein # vor dem Array steht wird die länge ermittelt, ja. Hier könnte man auch gut den unterschied zwischen @ und * sehen, beim Beispiel oben für ${#array[@]} als 3 aufgelöst weren und ${#array[*]} als 1
4.) Eh? Das tut die Linux Community? Ich kenns eher als alle variablen klein. Bei solchen loops werden eigentlich immer die iteratoren klein geschrieben. Meiner Ansicht nach kannst du deine Variablen groß oder klein schreiben wie du willst ;)
Aufgrund Deiner Antwort vermute ich mal, dass die doppelten runden Klammern für Linux das Signal sind, dass es sich hier um eine Rechenoperation handelt.
Soisses!
So ganz sinnbefreit finde ich den Gedanken dahinter auch nicht;
Das stimmt wohl Mir ists nur net bekannt. Denn folg mal dem Lehrbuch, der wird ja vielleicht was wissen ;)
Hallo DerDavidScheele,
danke Dir für die Antwort.
Zu 1.) mag ich noch sagen, dass ich Rechenoperationen mit Klammern zwar kenne, mich irrtierte es nur von vornherein, dass gleich zu Anfang und zum Ende jeweils zwei runde Klammern geschrieben wurden.
Aufgrund Deiner Antwort vermute ich mal, dass die doppelten runden Klammern für Linux das Signal sind, dass es sich hier um eine Rechenoperation handelt.
Zu 2.) Ah, okay. Das habe ich verstanden :-)
Zu 2a.) Okay. Dann ist das @-Zeichen sozusagen "multitaskingfähig" :-D
Zu 3.) Selbe Antwort wie bei "Zu 2.) :-)
Zu 4.) Das war die Aussage in meinem Lehrbuch (Linux-Server für Einsteiger) Man darf Variablen klein schreiben, aber weil sie von Linux als großgeschrieben vorgegeben sind. halten sich die meisten User dran.
So ganz sinnbefreit finde ich den Gedanken dahinter auch nicht; so erkennen DAUs wie ich, dass es sich um eine Variable handelt. Aber das ist eine Frage des eigenen Stils