#!/bin/bash permute() { local s=$1 d=$2 c o shift 2 for c do o=$s$c if ((d<=1)); then printf '%s\n' "$o" else permute "$o" "$((d-1))" "$@" fi done } permute "" 2 0 1 2