É possível. Aqui está uma função que fará o que você está pedindo.
function permutate {
if [ "${#1}" = 1 ]; then
echo "${2}${1}"
else
for i in $(seq 0 $((${#1}-1)) ); do
pre="${2}${1:$i:1}"
seg1="${1:0:$i}"
seg2="${1:$((i+1))}"
seg="${seg1}${seg2}"
permutate "$seg" "$pre"
done
fi
}
Execute assim:
$ permutate 1234
Funciona usando recursão. Cada chamada para a função pega um caractere da string e passa o restante para si mesmo recursivamente. Portanto, se a entrada for 1234, ela será dividida em um prefixo e o restante no segmento quatro vezes da seguinte forma: 1 234
2 134
3 124
4 123
. Os três segmentos de caracteres recebem o mesmo tratamento, depois os dois segmentos de caracteres e, em seguida, a recursão pára quando o segmento é apenas um caractere.