#!/bin/bash chars=(0 1 2) maxchars=2 function permute { [[ -z $nchar ]] && echo permute function needs nchar variable && exit 1 local charvar=char$nchar for char in ${chars[@]}; do eval $charvar=$char if (( nchar >= maxchars )); then tmp=1 until (( tmp > maxchars )); do var=char$tmp echo -n ${!var} (( tmp++ )) done; unset tmp var echo else (( nchar++ )) permute fi done (( nchar-- )) } nchar=1 permute