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

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

Re: [shell-script-pt] $((i)) ou $((i++)) no Dicas-L de 15/ago/2019 (Sub


From: Julio C. Neves
Subject: Re: [shell-script-pt] $((i)) ou $((i++)) no Dicas-L de 15/ago/2019 (Substituição de Processos)
Date: Sun, 14 Jun 2020 08:55:12 -0300

Caro Renato,
vou te responder no corpo da sua msg, para não deixar de abordar nenhum ponto, mas antes de mais nada, te agradeço de coração o elogio que fizeste

Em dom., 14 de jun. de 2020 às 00:39, romano@rcamoto.com.br <romano@rcamoto.com.br> escreveu:

Olá Júlio !

No Dicas-L de 15/ago/2019 (Substituição de Processos - http://www.dicas-l.com.br/arquivo/substituicao_de_processos.php) vi um exemplo que não entendi:

ls arq* | while read Arq
do
    echo $((i)) $Arq
done; echo Eu tenho :$i: arquivos

Com a saída esperada (supondo que os arquivos existam no diretório):
1 arq
2 arq.err
3 arq.err1
4 arq.limpo
Eu tenho :: arquivos


Mas quando tento da forma acima a variável i não é incrementada.
Não estaria faltando o '++' no ((i)) ?

Sem dúvida alguma está faltando. Como tudo que escrevo, testo antes, posso garantir que foi um erro de transcrição para o html do site. 

ls arq* | while read Arq
do
    echo $((i++)) $Arq              #<-------
done; echo Eu tenho :$i: arquivos

(assim funciona)

Não funciona não!!!!!!!!
Ainda tem duas coisas erradas aí:
1.
Se vc fizer $((i++)), com os mesmos arquivos do exemplo sua saída seria:
0 arq
1 arq.err
2 arq.err1
3 arq.limpo
Ou seja, a origem seria zero e não 1 pq vc usou uma pós incrementação e o correto seria uma pré incrementação com um echo $((++1))
2.
A última linha deveria ser:
Eu tenho :4: arquivos
E continua sendo:
Eu tenho :: arquivos
Isso ocorrerá por causa do pipe após o ls, que gerará um subshell para executar o while. Todo o valor de $i que foi alterado dentro desse subshell será perdido ao seu término e é aí que entra a substituição de processos para que isso não ocorra. Para tudo funcionar 100%, o script deveria ser:
while read Arq
do
    echo $((++i)) $Arq
done < <(ls arq*); echo Eu tenho :$i: arquivos

Durante esta semana que começa amanhã, as matrículas para o meu curso de programação em Shell estarão abertas. A ementa é 100% abrangente e pode ser vista em https://www.dicas-l.com.br/download/EmentaShell.pdf e em https://www.dicas-l.com.br/download/EmentaERs.pdf já que que faz o curso de programação em Shell, ganha um curso de Expressões Regulares.
  1. Vc pode ver todos os detalhes do curso em  https://educacao.dicas-l.com.br/shell-linux, mas assim mesmo vou mostrar uns diferenciais:
  2. Se o solicitar até a metade do curso, seu investimento será inteiramente restituído sem nenhuma pergunta;
  3. O material (dezenas de vídeos, o material de estudo, que é um livro de 350 páginas no formato A4 e convertido para HTML) passará a ser seu material de consulta, pois tudo ficará acessível por tempo indeterminado;
  4. Se vc tiver um problema que te impeça de fazer o curso direito, faça quantas vezes quiser gratuitamente. A nossa filosofia é que vc pagou para aprender Shell, então faça o curso (que tem muito conteúdo) até achar que aprendeu;
  5. Devido a essa maldita pandemia estamos dando 20% de abatimento aos 20 primeiros inscritos. Abriremos as matrículas no dia 15/06 (amanhã) e fecharemos no dia 19/05 ou qdo tivermos 40 inscritos, o que ocorrer primeiro;
  6. Dependendo do aproveitamento durante o curso de Shell damos aos nossos melhores alunos bolsas de estudos em treinamentos complementares, como YAD, Zenity, Dialog, Linux dicas e truques, ...
 Se vc quer aprender tudo de Shell rapidamente e sem risco do seu investimento inscreva-se, mas seja rápido para ganhar o desconto,



Não conhecia nem essa construção (com dois parênteses e o ++, que exibe e incrementa ao mesmo tempo - muito prática!).
De qualquer maneira já aprendi algo novo e deve ser útil a muitos!   :-)


Abraços de um fã.  ;-)
Renato Romano, São B. Campo

Abraços,
Julio

» Não tem tempo para fazer um curso presencial?
» Na sua cidade não tem nenhum bom curso de Linux?
» Em 15/06/2020 abriremos uma semana de inscrições
» para uma nova turma. Veja mais detalhes em:
»      https://educacao.dicas-l.com.br/shell-linux

Também damos treinamento em sua empresa
em qualquer cidadecom certificado e nota fiscal.





reply via email to

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