Is it possible to have anonymous functions in Bash? function anonfunc { (( anonfunc_cnt++ )); eval "function anonfunc$anonfunc_cnt { $1; }"; echo "anonfunc$anonfunc_cnt"; } That SEEMS like it should work: > anonfunc 'echo hi there' anonfunc1 > anonfunc1 hi there But it falls apart at a crucial point: > funcname=$(anonfunc 'echo hi there') > echo $funcname anonfunc1 > anonfunc1 command not found The reason? $(...) means it runs in a subshell, in a separate process, so any changes made there don't stick: > echo $(anonfunc 'echo hello there') anonfunc1 > echo $(anonfunc 'echo hello there') anonfunc1 > echo $(anonfunc 'echo hello there') anonfunc1