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

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

Re: [shell-script] Variavel que some...


From: Aurelio Marinho Jargas
Subject: Re: [shell-script] Variavel que some...
Date: Wed, 25 Aug 2004 11:15:56 -0300 (ART)

oi fernando,

 --- Fernando Lemes da Silva <address@hidden> escreveu: 
> Quero somar a quantidade de bytes
> echo "$lista" |
> while read file; do
>      total=$[ $total + `du -b "$file" | cut -f1` ]
> done
> 
> Porém a variavel $total sai "limpa" depois do loop..

isso acontece porque foi usado o pipe |, então o while
é executado como em uma subshell, e as variáveis definidas
dentro dele não valem para a shell corrente.

veja um exemplo. o "seq 5" é usado para gerar os numeros
de 1 a 5 e o código serve para somá-los.

$ z=0 ; for i in $(seq 5); do z=$((z+i)); done ; echo $z
15

$ z=0 ; seq 5 | while read i; do z=$((z+i)); done ; echo $z
0

$ z=0 ; while read i; do z=$((z+i)); done < <(seq 5); echo $z
15

usando o for, tudo bem, pois não é pipe. já no segundo
exemplo, é o |while, que o total é perdido e no terceiro
exemplo é o while sem pipe, usando a construção <(comando)
do bash2, que executa um comando e retorna um "objeto"
arquivo, assim o while pensa que está lendo de um arquivo.

uma alternativa pra quer quer usar o while e não tem o <(...)
é gravar um arquivo temporário:

$ seq 5 > arq ; z=0 ; while read i; do z=$((z+i)); done < arq
$ echo $z
15

falou!

=====
-- 
Aurelio Marinho Jargas, Curitiba, Conectiva
Banda CORRERIA http://correria.org


        
        
                
_______________________________________________________
Yahoo! Acesso Grátis - navegue de graça com conexão de qualidade! 
http://br.acesso.yahoo.com/


reply via email to

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