shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Múltiplas variáveis em um loop


From: Arkan Add
Subject: Re: [shell-script] Múltiplas variáveis em um loop
Date: Thu, 24 Nov 2016 13:03:42 +0000 (UTC)

Simples e eficaz. 
Obrigado pessoal.
Simplesmente incrível.


On Thursday, November 24, 2016 10:35 AM, "'Julio C. Neves' address@hidden [shell-script]" <address@hidden> wrote:


 
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 :(

Abcs,
Julio
@juliobash

P
róximos cursos de Shell
Cidade         Local Período
São Paulo 4Linux 05
-09/12
Dou treinamento de Shell em qualquer cidade.
Para mais detalhes, me mande um e-mail.

Em 24 de novembro de 2016 09:23, Julio C. Neves <address@hidden> escreveu:
Solução super bem sacada! Gostei muito. Se der tempo (já foi para a editora há uma semana), ainda sai com teu nome na 11a. edição do livro de Shell.

Vc já está em umas 5 ou 6 citações.

Abcs,
Julio
@juliobash

P
róximos cursos de Shell
Cidade         Local Período
São Paulo 4Linux 05
-09/12
Dou treinamento de Shell em qualquer cidade.
Para mais detalhes, me mande um e-mail.

Em 23 de novembro de 2016 19:23, address@hidden [shell-script] <address@hidden. br> escreveu:
 
Arkan Add
Só pra complementar e peloo Julio que curte alguns features do Bash mais atual vou dar um pitaco que com certeza ele conhece.
Ao invés de usar 3 variáveis poderia usar essa construção.
Vou limitar o exemplo com 2 opção na primeira parte, 3 na segunda e 4 na terceira:

$ for termo in $(echo {1..2}/{1..3}/{1..4});do echo "$termo"; done

Essa solução serve?

[]'s
Itamar





reply via email to

[Prev in Thread] Current Thread [Next in Thread]