Aê Itamar, mandei o seguinte para a editora para ver se ainda dá para incluir na 11a. edição do meu livro:
Um colega postou a sua dúvida na lista de Shell
do Yahoo:
Tenho três variáveis,
$var1, $var2 e $var3. Quero gerar
todos os valores possíveis no formato
$var1/$var2/$var3, sendo que:
$var1
varia de 1 a
14;
$var2
varia de 1 a
8;
$var3
varia de 1 a
64.
Fui o primeiro a responder e logo de cara, sugeri
o mais óbvio, isto é, três comandos for
encadeados, fazendo assim:
for
((var1=1;var1<=14; var1++))
{
echo
$var1/$var2/$var3
for
((var2=1;var2<=8;var2++))
{
echo
$var1/$var2/$var3
for
((var3=1; var3<64; var3++))
{
echo
$var1/$var2/$var3
}
}
}
Logo depois, o Itamar Santos de Souza manda essa
preciosidade:
for
termo in $(echo {1..14}/{1..8}/{1..64})
do
echo
"$termo"
done
Matou a pau! Dessa forma, ele não usou nenhuma
variável e fez somente um for, onde a
execução é feita de trás para a frente, isto é, a cada vez que o
3o índice chega a 64, o 2o
é incrementado em 1 e este, por sua
vez, quando chega a 8, incrementa o 1o
e o loop terminará a execução
quando este índice chegar a 14.
Mas roubando a sua ideia de usar expansão de
chaves, ainda consegui gerar um one-liner, cujo tempo de execução é
o menor dentre as 3 opções citadas. Veja:
echo
{1..14}/{1..8}/{1..64} | tr ' ' '\n'
Pessoal, coloquei estes exemplos para enfatizar o
que eu sempre digo: "nunca pergunte se uma determinada tarefa
pode ser implementada em Shell. A
pergunta correta é: qual é a melhor forma de se implementar esta
tarefa em Shell".
=====================================
Espero que vc não se importe de ser citado
OBS: O servidor de e-mail comeu toda a indentação que fiz :(