|
From: | Julio C. Neves |
Subject: | Re: [shell-script] Múltiplas variáveis em um loop |
Date: | Thu, 24 Nov 2016 10:34:54 -0200 |
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 :(
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.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
[Prev in Thread] Current Thread [Next in Thread]
- Múltiplas variáveis em um loop, arkanadd, 2016/11/23
- Re: [shell-script] Múltiplas variáveis em um loop, Julio C. Neves, 2016/11/23
- Re: [shell-script] Múltiplas variáveis em um loop, Arkan Add, 2016/11/23
- Re: [shell-script] Múltiplas variáveis em um loop, itamarnet, 2016/11/23
- Re: [shell-script] Múltiplas variáveis em um loop, Julio C. Neves, 2016/11/24
- Re: [shell-script] Múltiplas variáveis em um loop, Alfredo Casanova, 2016/11/24
- Re: [shell-script] Múltiplas variáveis em um loop, Julio C. Neves <=
- Re: [shell-script] Múltiplas variáveis em um loop, Arkan Add, 2016/11/24
- Re: [shell-script] Múltiplas variáveis em um loop, itamarnet, 2016/11/24
- Re: [shell-script] Múltiplas variáveis em um loop, Julio C. Neves, 2016/11/24
- Re: [shell-script] Múltiplas variáveis em um loop, Alfredo Casanova, 2016/11/24
- Re: [shell-script] Múltiplas variáveis em um loop, Julio C. Neves, 2016/11/24
- Re: [shell-script] Múltiplas variáveis em um loop, Alfredo Casanova, 2016/11/24
- Re: [shell-script] Múltiplas variáveis em um loop, Alfredo Casanova, 2016/11/24
- Re: [shell-script] Múltiplas variáveis em um loop, Julio C. Neves, 2016/11/25
- retorno de comando para variavel, Kleyton Maia, 2016/11/25
- Re: [shell-script] retorno de comando para variavel, Cristiano Amaral, 2016/11/25
- Prev by Date: Re: [shell-script] Múltiplas variáveis em um loop
- Next by Date: Re: [shell-script] Múltiplas variáveis em um loop
- Previous by thread: Re: [shell-script] Múltiplas variáveis em um loop
- Next by thread: Re: [shell-script] Múltiplas variáveis em um loop
- Index(es):