Развернуть переменную в определении функции в zsh

Я хочу сгенерировать набор функций в моей оболочке в цикле for , но я не вижу, как получить доступ к переменной внутри тела функции создаваемой функции.

В сущности, я хотел бы

 for f in foo ; do $f() { echo $f } ; done 

для генерации функции foo() { echo foo } , но вместо этого я получаю foo() { echo $f } .

Я прочитал раздел о флажках расширения параметров в руководстве zsh, но все, что я пишу после $f() кажется, передается дословно в тело сгенерированной функции, поэтому мне не повезло.

Может быть, это неправильный способ сделать это? Если нет, я хочу знать, как я могу расширить $f внутри функции, когда она сгенерирована.

Это типично случай, когда вам нужен eval .

 $ for f (foo) eval "\$f() echo ${(qq)f}" $ which foo foo () { echo 'foo' }