Команда цикла по элементам одного или нескольких списков.
foreach varname list body foreach varlist1 list1 ?varlist2 list2...? body
Команда организует выполнение цикла, в котором переменные цикла последовательно принимают все значения из списков значений. В простейшем случае имеется одна переменная цикла varname и один список значений list для присвоения переменной цикла. Аргумент body есть скрипт Tcl. Для каждого элемента списка list, по очереди с первого до последнего, foreach присваивает содержимое очередного элемента списка переменной varname и затем вызывает интерпретатор Tcl для исполнения body.
В общем случае в команде может быть указано несколько списков значений (например, list1 и list2), и каждый из них может быть связан с одной переменной или со списком переменных цикла (например, varlist1 и varlist2). Во время каждой итерации переменные каждого списка переменных принимают значения последовательных элементов соответствующего списка значений. Значения из списков значений используются последовательно от первого до последнего, и каждое значение используется только один раз. Общее число итераций выбирается таким, чтобы использовать все значения из всех списков значений. Если список значений не содержит достаточного числа значений для всех связанных с ним переменных цикла, вместо недостающих элементов используются пустые значения.
Внутри скрипта body можно использовать команды break и continue, аналогично команде for.
Команда foreach возвращает пустую строку.
В цикле используются переменные цикла i и j для цикла по элементам одного списка
set x {} foreach {i j} {a b c d e f} { lappend x }
В результате величина x равна "a d c f e".
При вычислении цикла используются три итерации.
В цикле переменные цикла i и j используются для различных списков значений.
set x {} foreach i {a b c} j {d e f g} { lappend x }
В результате величина x равна "a d b e c f {} g".
При вычислении цикла используются четыре итерации.
Обе предыдущие формы скомбинированы в следующем цикле
set x {} foreach i {a b c} {j k} {d e f g} { lappend x }
В результате величина x равна "a d e b f g c {} {}".
При вычислении цикла используются три итерации.