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

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

RES: [shell-script] Perdendo variáveis novamente


From: Julio Cezar Neves - DATAPREVRJ
Subject: RES: [shell-script] Perdendo variáveis novamente
Date: Wed, 14 Sep 2005 16:54:37 -0300

Caro Richard,
o problema não está no loop, mas sim no pipe. É pq cada pipe é executado em
um subshell e no shell as coisas funcionam da seguinte maneira: na criação
de um subshel, as variáveis exportadas do shell pai sõ *copiadas* para cada
subshell. Desta forma, ao fim de cada subshell, os valores de suas variáveis
são perdidos, ficandos os valores que tinham no shell original.

Então respondendo a sua pergunta: para vc não perder os valores de uma
variável alterada no interior de um loop, basta que este loop não seja
acionado por um pipe e existem algumas formas para fazer isso. Por exemplo:

Para trabalhar um arquivo usamos redirecionamento de entrada. Evite:

cat arq | while read linha
...
...
done

Prefira:

while read linha
...
...
done < arq

Para trabalhar comandos, usamos substituição de processos. Evite

ls | while read arq
do
    let i++
    echo $i $arq
done
echo $i

Prefira:

while read arq
do
    let i++
    echo $i $arq
done < <(ls)
echo $i

SuShellso,
Julio
:wq

| -----Mensagem original-----
| De: richardbortolucci [mailto:address@hidden]
| Enviada em: quarta-feira, 14 de setembro de 2005 16:37
| Para: address@hidden
| Assunto: [shell-script] Perdendo variáveis novamente
| 
| 
| Pessoal,
| 
| Há pouco tive um problema com variáveis que são zeradas após um loop
| while e agora voltei a encontrar esse problema mas em uma situação
| diferente, com vários loops, etc... bom a dúvida é a seguinte: é
| possível criar variáveis que não se perdem após os loops? 
| 
| Por exemplo: eu crio a variável antes do loop, atribuo um valor a
| mesma, altero a mesma várias vezes dentro de vários loops (while, for,
| etc) e após todos os loop eu apresento a mesmo variável.
| 
| Richard.
| 
| 
| 
| 
| ---------------------------------------------------------------------
| Esta lista não admite a abordagem de outras liguagens de 
| programação, como perl, C etc. Quem insistir em não seguir 
| esta regra será moderado sem prévio aviso.
| ---------------------------------------------------------------------
| Sair da lista: address@hidden
| ---------------------------------------------------------------------
| Esta lista é moderada de acordo com o previsto em 
http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
 
Links do Yahoo! Grupos




 



reply via email to

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