Skip to content

Wie man in zsh . ein Wort nach dem anderen durch die Zeichenfolge iteriert

Lösung:

Um das Verhalten zu sehen, das mit der Bourne-Shell kompatibel ist, müssen Sie die Option festlegen SH_WORD_SPLIT:

setopt shwordsplit      # this can be unset by saying: unsetopt shwordsplit
things="one two"

for one_thing in $things; do
    echo $one_thing
done

würde produzieren:

one
two

Es wird jedoch empfohlen, ein Array für die Wortaufteilung zu verwenden, z.

things=(one two)

for one_thing in $things; do
    echo $one_thing
done

Sie können sich auch auf Folgendes beziehen:

3.1: Warum macht $var where var="foo bar" nicht das, was ich erwarte?

Du kannst den ... benutzen z Variablenerweiterungs-Flag zum Aufteilen von Wörtern für eine Variable

things="one two"

for one_thing in ${(z)things}; do
    echo $one_thing
done

Lesen Sie mehr über dieses und andere Variablen-Flags in man zshexpn, unter "Parametererweiterungs-Flags".

Eine andere Möglichkeit, die auch zwischen Bourne-Shells (sh, bash, zsh usw.) portierbar ist:

things="one two"

for one_thing in $(echo $things); do
    echo $one_thing
done

Oder, wenn Sie nicht brauchen $things als Variable definiert:

for one_thing in one two; do
    echo $one_thing
done

Verwenden von for x in y z weist die Shell an, eine Liste von Wörtern zu durchlaufen, y, z.

Das erste Beispiel verwendet die Befehlsersetzung, um die Zeichenfolge zu transformieren "one two" in eine Liste von Wörtern, one two (keine Anführungszeichen).

Das zweite Beispiel ist dasselbe ohne echo.

Hier ist ein Beispiel, das nicht funktioniert, um es besser zu verstehen:

for one_thing in "one two"; do
    echo $one_thing
done

Beachten Sie die Zitate. Dies wird einfach gedruckt

one two

weil die Anführungszeichen bedeuten, dass die Liste ein einzelnes Element enthält, one two.

Click to rate this post!
[Total: 0 Average: 0]



Anderer Beitrag

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.