Warum tut 'für jeden Text; Schleife viermal?

9

Ist das ein Fehler oder eine Funktion?
Es scheint für nicht zitierte alphanumerische Zeichen zu passieren .

Ausführen von GNU Bash, Version 4.1.5

for alpha01234; do echo $((++i)); done

Ausgabe:

1
2
3
4
Peter.O
quelle

Antworten:

14

Dies ist eine Funktion des forzusammengesetzten Befehls, wie beschrieben durch help for:

for: for NAME [in WORDS ... ] ; do COMMANDS; done

Führen Sie Befehle für jedes Mitglied in einer Liste aus.

Die forSchleife führt eine Folge von Befehlen für jedes Mitglied in einer Liste von Elementen aus. Wenn in WORDS ...;nicht vorhanden, in "$@"wird angenommen. Für jedes Element in WORDS, NAMEwird auf dieses Element gesetzt, und der COMMANDSausgeführt werden.

Der von Ihnen angegebene Code wird also wahrscheinlich in einem Skript ausgeführt, das mit 4 Parametern aufgerufen wurde.

Mann bei der Arbeit
quelle
Danke ... Die Sache, die mich völlig umgehauen hat, war, dass es über die Kommandozeile passiert ist. Ich habe es tatsächlich nicht in einem Skript versucht. Ich muss es set a b c dirgendwann irgendwann benutzt haben. Ich benutze setdiese Art oft in einem Skript zum Testen. Nach dem Neustart des Terminals hat es aufgehört ... (macht jetzt Sinn).
Peter.O
12

for x; do …ist eine Abkürzung für for x in "$@"; do …: Sie iteriert über die Positionsparameter. Wenn es viermal wiederholt wird, bedeutet dies, dass Sie vier Positionsparameter ( $1durch $4) haben.

Gilles 'SO - hör auf böse zu sein'
quelle