Przejdź do głównej zawartości

for


  • for – struktura sterująca dostępna w większości powłok uniksowych (bash, zsh, ksh, dash) do wykonywania bloków kodu wielokrotnie dla każdego elementu w liście.
  • Przydatna w automatyzacji, przetwarzaniu plików, iteracji po argumentach, generowaniu raportów itp.
  • Obsługiwana w trybie interaktywnym i skryptowym.

Okno terminala
for zmienna in lista; do
komendy
done
  • Alternatywnie (jednolinijkowo):
Okno terminala
for x in a b c; do echo $x; done
  • W bashu dostępna także forma iteracji liczbowej:
Okno terminala
for ((i=0; i<10; i++)); do
komendy
done

ElementOpis
zmiennaZmienna, której wartość przyjmowana jest z listy iteracyjnej
in listaLista wartości (może być pusta – wtedy iteruje po pozycyjnych parametrach skryptu)
do ... doneBlok kodu wykonywany dla każdego elementu
(( ... ))Wariant arytmetyczny (tylko w bash/ksh/zsh)

Okno terminala
# 1. Iteracja po nazwach plików
for plik in *.txt; do
echo "Znaleziono: $plik"
done
# 2. Prosta pętla numeryczna (Bash)
for ((i=1; i<=5; i++)); do
echo "Liczba: $i"
done
# 3. Iteracja po argumentach skryptu
for arg in "$@"; do
echo "Argument: $arg"
done
  • Pierwszy przykład przetwarza wszystkie pliki .txt w bieżącym katalogu.
  • Drugi to klasyczna pętla licznikowa.
  • Trzeci iteruje po argumentach przekazanych do skryptu (np. ./skrypt.sh a b c).

  • W powłokach POSIX nie ma formy for ((...)); dostępna tylko w rozszerzeniach takich jak bash.
  • Warto cytować zmienne ("$x") w ciele pętli, by uniknąć problemów ze spacjami lub znakami specjalnymi.
  • Iterowanie po wynikach poleceń warto poprzedzić cytowaniem i mapowaniem (np. find ... -print0 | while IFS= read -r -d '').
  • Pętle można zagnieżdżać i łączyć z innymi instrukcjami (np. if, case, break, continue).

Błąd / KomunikatPrzyczynaRozwiązanie
unexpected token 'do'Błąd składniowy – brak in lub średnika przed doPopraw składnię: for x in ...; do
Brak działania w for ((...))Powłoka nie obsługuje składni arytmetycznejUżyj bash, zsh lub zastąp seq + klasyczne for
Pętle z dziwnym zachowaniem przy spacjiNiezacytowane zmienne zawierające spacjeCytuj zmienne: "$x"