it-swarm.com.de

Wie erstelle ich eine for-Schleife in der Kommandozeile?

Nehmen wir ein einfaches for loop

#!/bin/bash

for i in `seq 1 10`;
do
    echo $i
done

Das AFAIK-Semikolon in Bash-Skripten bewirkt, dass Shell den aktuellen Befehl synchron ausführt und dann zum nächsten übergeht. Das Drücken der Eingabetaste ist buchstäblich dasselbe, außer dass Sie den folgenden Befehl nicht eingeben können, wodurch der Puffer sofort geleert wird.

Warum kann Shell die folgende Zeile nicht interpretieren?

for i in `seq 1 10`; do; echo $i; done

wie geht das for loop tatsächlich arbeiten?

26
user30167

Die Syntax einer for - Schleife aus der bash - Handbuchseite lautet

for name [ [ in [ Word ... ] ] ; ] do list ; done

Die Semikolons können durch Wagenrückläufe ersetzt werden, wie an anderer Stelle auf der Handbuchseite bash angegeben: "Eine Folge von einer oder mehreren Zeilenumbrüchen kann in einer Liste anstelle eines Semikolons zur Begrenzung von Befehlen angezeigt werden."

Das Gegenteil ist jedoch nicht der Fall; Sie können Zeilenumbrüche nicht willkürlich durch Semikolons ersetzen. Ihr mehrzeiliges Skript kann in eine einzelne Zeile konvertiert werden, solange Sie die obigen Syntaxregeln beachten und nach dem do kein zusätzliches Semikolon einfügen:

for i in `seq 1 10`; do echo $i; done
21
user4556274

Das Semikolon nach do ist ein Fehler und sollte nicht vorhanden sein.

Folgendes funktioniert korrekt:

for i in `seq 1 10`; do echo $i; done 
18
dr_