[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/
- Variavel que some..., Fernando Lemes da Silva, 2004/08/24
- Re: [shell-script] Variavel que some...,
Aurelio Marinho Jargas <=