for-Schleife in bash Argumente mit "..." übergeben?


03.02.2022, 13:57

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.

Woher ich das weiß:Berufserfahrung – Programmierer

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.