Argument <zmienne> jest to lista nazw zmiennych (najczęściej jest to jedna zmienna), do których mają być wpisane wartości kolejno pobierane z <listy> (jeśli zabraknie do wypełnienia wszystkich, to zmienne, dla których brakuje, są zapisywane pustym napisem). Można też podać kilka serii „<zmienne> <lista>” i wtedy kilka list może być przetwarzane równolegle. Najprostsza postać użycia to:
foreach i [info vars] { puts $i }
które wypisze listę nazw aktualnie widzianych zmiennych.
Do sterowania przepływem wewnątrz pętli służą komendy break i continue.
Wejście i wyjście Najczęściej używaną komendą do wypisywania jest komenda puts:
puts ?-nonewline? ?gdzie? <tekst>
Komenda puts domyślnie dodaje znak końca linii, chyba że użyjemy opcji -nonewline. Opcjonalny argument ?gdzie? jest nazwą kanału otwartego do zapisu (domyślnie jest to stdout).
Kanały w Tcl-u są identyfikatorami miejsc, na rzecz których wykonywane są operacje wejścia/wyjścia. Ich nazwy są tworzone przez komendy, które tworzą takie kanały, ale poza tym istnieją trzy kanały dostępne zawsze, które nazywają się stdin, stdout i stderr i oznaczają tzw. standardowe wejście, standardowe wyjście i standardowe wyjście diagnostyczne.