#!/bin/bash function aqueduct { let param_i=$1+1 if [[ $param_i == $param_n ]] ; then ${params[$param_i]} # run the last element else ${params[$param_i]} | (aqueduct $param_i) # run fi } function f { param_n=0 while ! [[ $1 == "" ]] ; do let param_n=$param_n+1 params[$param_n]=$1 shift done aqueduct 0 } # Example of usage f "echo 1" "tee log1" "tee log2"