Dlaczego ”dla dowolnego tekstu; robić pętlę cztery razy?

9

Czy to błąd, czy funkcja?
Wydaje się, że dzieje się tak w przypadku niecytowanych alfanumerycznych.

Uruchamianie GNU bash, wersja 4.1.5

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

wynik:

1
2
3
4
Peter.O
źródło

Odpowiedzi:

14

Jest to cecha forpolecenia złożonego, opisana przez help for:

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

Wykonuj polecenia dla każdego członka na liście.

forPętla wykonuje sekwencję poleceń dla każdego członka na liście elementów. Jeśli in WORDS ...;nie jest obecny, in "$@"zakłada się. Dla każdego elementu WORDS, NAMEjest ustawiony na ten element, a COMMANDSsą wykonywane.

Więc cytowany kod jest prawdopodobnie wykonywany w skrypcie, który został wywołany z 4 parametrami.

człowiek w pracy
źródło
Dzięki ... Rzeczą, która mnie całkowicie rzuciła, było to, że stało się to w wierszu poleceń .. Właściwie to nie próbowałem tego w skrypcie .. Musiałem użyć set a b c djakiś czas temu. Często używam settego w skrypcie do testowania. Po ponownym uruchomieniu terminalu przestał
działać
12

for x; do …jest skrótem do for x in "$@"; do …: iteruje parametry pozycyjne. Jeśli zapętla się cztery razy, oznacza to, że masz cztery parametry pozycyjne ( $1przez $4).

Gilles „SO- przestań być zły”
źródło