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: Julio C. Neves
Subject: Re: [shell-script] Múltiplas variáveis em um loop
Date: Thu, 24 Nov 2016 10:34:54 -0200

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]