Sou Analista/Desenvolvedor a alguns anos e trabalho essencialmente com a linguagem Java, porém me interesso por linux também já a muito tempo, mas ainda não havia desenvolvido nenhum trabalho na área, coisa que mudou, devido a nova vertente de desenvolvimento que encontro no momento.
Estou tentando transcrever um código Java para o Shell Script, porém encontro alguns problemas, acredito eu ter implementando todas as peculiaridades do Java de forma correta no Shell Script, porém depois de vários debugs nas duas linguagens, suspeito que o Shell Script não ofereça bom suporte a Recursividade, consulto o fórum para saber sobre o assunto.
Os Script a serem desenvolvidos tem o objetivo de a partir de uma palavra informada como parâmetro montar um anagrama dessa palavra, ou seja, fazer todas as combinações possíveis entre suas letras, uma pratica comum para se montar um dicionário de senhas.
Pelo que notei, a recursividade do Shell Script quando atinge seu último nível, não continua a execução do primeiro. Alguém consegue confirmar minha suspeita ?
public static void imprimeAnagramas(String prefix, String word) {
if (word.length() <= 1) {
System.out.println(prefix + word);
} else {
for (int i = 0; i < word.length(); i++) {
String cur = word.substring(i, i + 1);
String before = word.substring(0, i);
String after = word.substring(i + 1);
imprimeAnagramas(prefix + cur, before + after);
}
}
}
}
Transcrição feita por mim, para Shell Script
#!/bin/bash
imprimeAnagrama() {
prefixo=$1
palavra=$2
if [ ${#palavra} -le 1 ]
then
echo $prefixo""$palavra
else
i=1
while [ $i -lt ${#palavra} ]
do
anteriorI=$(($i-1))
proximoI=$(($i+1))
corte=$(expr substr $palavra $i $i)
anterior=$(expr substr $palavra 1 $anteriorI)
depois=$(expr substr $palavra $proximoI ${#palavra})
((i++))
imprimeAnagrama $prefixo""$corte $anterior""$depois
done
fi
}
imprimeAnagrama "" $1
Espero que alguém possa me ajudar com esse problema, e propor um solução eficaz em Shell Script e/ou também informar sobre demais peculiaridades do Shell Script que impedem esta solução, desta forma.