lambda() { # Save orignal function local ORIGINAL=$(declare -f otl) local SHIFT_SIZE=${1} shift local vars=() for ((i=0;i<${SHIFT_SIZE};i++)); do vars+=(${1}) shift done eval "otl() { $@; }" otl ${vars[@]} unset -f otl eval "${ORIGINAL}" } lambda 3 ro sham bo 'echo $3 $2 $1'