
declare cmd=$1 per i=-1 begin end {pre,stu}{,cmd}
declare -a args=( "${@:2}" )
set --

eval -- "
$pre
$begin
"

while [[ -v args[++i] ]] && per=${args[i]} ; do
 eval -- "
$precmd
$cmd
$stucmd
"
done

eval -- "
$end
$stu
"
 
