for-Schleife in bash Argumente mit "..." übergeben?
Hi,
wenn ich folgende Schleife in der bash hab
dann verstehe ich zwar das Prinzip der Schleife ungefähr.
Aber ich habe nicht ganz verstanden, wo der Unterschied beim platzieren der "..." ist, wenn ich diese Schleife z.B. aufrufe mit:
bash ./myscript.sh "1 2 3" 10 6 7
Was bewirkt das platzieren der "..." um die 123 im Gegenzug zu der 10, 6 und 7?
Danke für eure Hilfe
Ergänzung: Nehme ich korrekt an, dass diese Schleife alle meine Argumente in einer einzigen Zeile ausgeben würde?
3 Antworten
Hallo
Grob gesagt, alles innerhalb von zwei Anführungsstrichen (double Qoutes) wird als ein String behandelt, außer bestimmte Sonderzeichen, welche von der Bash weiterhin interpretiert werden können. Innerhalb von single Quotes ist alles ein String, auch Sonderzeichen werden nicht mehr von der Bash interpretiert.
Als Beispiel setzen wir eine Variable und lassen uns diese mal ausgeben:
X=123
echo ${X}
123
123 ist ein zusammenhängender String und wird auch so behandelt. Wenn aber ein Leerzeichen dazwischen gerät, dann sieht die Sache schon anders aus.
X=1 2 3
2: Befehl nicht gefunden.
Das würde einen Fehler ergeben, da die Bash die Variable X=1 setzt und dann versucht den Befehl "2" auszuführen, welcher auf das setzen der Variable X=1 folgt, nach einem Leerzeichen. Das geht natürlich nicht, da die 2 kein Befehl ist. Also müssen wir 1 2 3 als String definieren.
X="1 2 3"
Jetzt interpretiert die Bash alles, außer bestimmte Sonderzeichen, zwischen den beiden double Quotes, als einen String und setzt die Variable X. Diese können wir uns dann ausgeben lassen.
X="1 2 3"
echo ${X}
1 2 3
Als Ergebnis wir der String 1 2 3 ausgegeben.
Sonderzeichen zwischen double Quotes, wie z.B. das $ Zeichen, werden von der Bash mit interpretiert und nicht dem String zugeordnet.
X="1 2 3"
echo "${X}"
1 2 3
Deshalb kann die Variable nach dem echo auch zwischen Double Quotes interpretiert werden.
Single Quotes verhindern auch noch das auswerten dieser Sonderzeichen durch die Bash. Alles zwischen Single Quotes wird als ein String behandelt und auch genau so weiter verarbeitet.
X='1 2 3'
echo ${X}
1 2 3
Wenn wir aber die Variable, zur Ausgabe durch z.B. echo, in single Quotes setzen, dann wird exakt das ausgegeben, was als String da steht, ohne irgendwas zu interpretieren.
X=0000
echo '${X}'
${X}
In dem Fall wird die Variable X nicht mehr interpretiert, sondern nur noch 1:1 ausgegeben, was als String da steht.
Nehme ich korrekt an, dass diese Schleife alle meine Argumente in einer einzigen Zeile ausgeben würde?
Wenn die Schleife funktionieren würde, dann würde die Ausgabe zeilenweise erfolgen, nach jedem Durchlauf der for Schleife und nicht in einer einzigen Zeile. Allerdings funktioniert die Schleife so noch nicht, da die Variablen $2 und $3 noch nicht definiert sind. Ach ja, da Punktrechnungen vor Strichrechnungen kommen, kannst du die Klammern in der "Rechenaufgabe" weglassen.
Ich hoffe mal, das ich mich halbwegs verständlich ausgedrückt habe.
mfG computertom
Ich kenne die Programmiersprache nicht, aber unter batch (cmd) wäre der Unterschied der, dass 0 1 2 drei Parameter 0, 1 und 2 wären, während "0 1 2" wie ein Parameter gedeutet werden würde.
Hallo. "1 2 3" ist einfach ein einziges Argument, heißt dann glaube $1 ($0 ist der Name der aufgerufenen Datei). 10, 7 und 6 wären dann einfach jeweils weitere Argumente.