Nehmen wir eine einfache for loop
#!/bin/bash for i in `seq 1 10`; do echo $i done
AFAIK-Semikolon in Bash-Skripten bewirkt, dass die Shell den aktuellen Befehl synchron ausführt und dann zum nächsten übergeht. Durch Drücken der Eingabetaste wird derselbe Befehl buchstäblich genauso ausgeführt, außer dass Sie den folgenden Befehl nicht eingeben und den Puffer sofort leeren können.
Warum kann die Shell die folgende Zeile nicht interpretieren?
for i in `seq 1 10`; do; echo $i; done
Wie funktioniert diese for loop
tatsächlich? Arbeit?
Antwort
Die Syntax einer for
-Schleife aus der bash
Handbuchseite ist
for name [ [ in [ word ... ] ] ; ] do list ; done
Die Semikolons können durch Zeilenumbrüche ersetzt werden, wie an anderer Stelle in der bash
Handbuchseite: „In einer Liste wird möglicherweise eine Folge von einer oder mehreren Zeilenumbrüchen anstelle eines Semikolons angezeigt, um Befehle abzugrenzen.“
Das Gegenteil ist jedoch nicht der Fall Ersetzen Sie Zeilenumbrüche willkürlich mit Semikolons. Ihr mehrzeiliges Skript kann in eine einzelne Zeile konvertiert werden, solange Sie die obigen Syntaxregeln beachten und kein zusätzliches Semikolon nach do
einfügen:
for i in `seq 1 10`; do echo $i; done
Kommentare
- Das endgültige Skript ist falsch. Wie @ dr01 hervorhob, müssen Sie das Semikolon nach .
- @jake, dies bedeutet auch, dass Sie das Semikolon nach
do
entfernen müssen. Darüber hinaus erklärt diese Antwort warum Sie das Semikolon nach `do ' entfernen müssen. - Was ist, wenn
$i
muss Teil eines Dateinamens sein? Benötigt es doppelte Anführungszeichen? - do
filename_${i}
dann - @ user4556274 gemäß der Syntax " denn ich tue; erledigt " sollte ebenfalls funktionieren. Warum ist ' nicht so?
Antwort
Das Semikolon nach do
ist ein Fehler und sollte nicht vorhanden sein.
Folgendes funktioniert ordnungsgemäß:
for i in `seq 1 10`; do echo $i; done