|
From: | Itamar Santos de Souza |
Subject: | Re: [shell-script-pt] $((i)) ou $((i++)) no Dicas-L de 15/ago/2019 (Substituição de Processos) |
Date: | Sun, 14 Jun 2020 15:43:32 +0000 (UTC) |
Correto!
Eu havia me atentado apenas à incrementação. kkkk
Não tinha me preocupado com o início (em zero) ou a linha
final (valor perdido pois está num subshell).
Didática zero a minha! kkkkk
Obrigado Júlio!
Renato
------------------------------------------------------------------------------------------------
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)) ?
ls arq* | while read Arq
do
echo $((i++)) $Arq #<-------
done; echo Eu tenho :$i: arquivos
(assim funciona)
Se vc fizer $((i++)), com os mesmos arquivos do exemplo sua saída seria:
0 arq1 arq.err2 arq.err13 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))
A última linha deveria ser:Eu tenho :4: arquivosE continua sendo:Eu tenho :: arquivosIsso 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 Arqdoecho $((++i)) $Arqdone < <(ls arq*); echo Eu tenho :$i: arquivos
Abraços,
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
_______________________________________________ Lista brasileira de usuários de shell script Endereço de e-mail da lista: shell-script-pt@nongnu.org Para se inscrever ou desinscrever acesse: https://lists.nongnu.org/mailman/listinfo/shell-script-pt Para ver os arquivos da lista (mensagens anteriores) e pesquisar nelas, acesse https://lists.nongnu.org/archive/html/shell-script-pt/ NOTA: A lista anterior, no Yahoo Groups, foi *desativada*. Por favor utilize somente esta.
[Prev in Thread] | Current Thread | [Next in Thread] |