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

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

Re: [shell-script] Valor perdido ao sair de loop


From: Geison Farias
Subject: Re: [shell-script] Valor perdido ao sair de loop
Date: Thu, 14 Sep 2006 18:01:22 -0300
User-agent: Thunderbird 1.5.0.5 (Windows/20060719)


Puxa, valeu Tiago.

Havia tentado outras formas de redirecionamento mas não esta: "< <( xxx )".
Desconfiava do sub-shell...

Brigadão.
Geison



Tiago Barcellos Peczenyj escreveu:
quando vc faz

echo "alguma coisa" | while read A ; do ... ; done

a parte que lida com a variavel A é executada em um sub-Shell. Ao
alterar uma variavel em um subshell vc não tem como fazer o valor
voltar, pois não existe uma referência entre os shells.

Faça assim:

#!/bin/bash
A="..."

JUNTA=
CAMPOS=

while read LINHA ; do
   C1=${LINHA:2:3}
   C2=${LINHA:6:3}
   C3=${LINHA:8:3}
   C4=${LINHA:14:3}

   CAMPOS="${C1}${C2}${C3}${C4}---"

   JUNTA=${JUNTA}${CAMPOS}

done < <(echo "$A"| grep "^9........j")

echo "${JUNTA}"

pois o redirecionamento '<' é mais 'confiavel' para o que vc quer ;-)

On 9/14/06, Geison Farias <address@hidden> wrote:
Olá pessoal,

Me deparei um um prob. que não sei explicar:

-simples busca das linhas iniciadas com 9 e que tenham a letra "j" na
posição 10;
encontrando, concatene campos desta linha com os campos das demais linhas...

RESULTADO: quando sai do loop o valor do meu resultado é perdido!
(resolvi parcialmente aqui, jogando para um arquivo, mas gostaria que
fosse todo em
variável). Alguém poderia explicar ?

--------------------------INICIO_SCRIPT
#!/bin/bash
# a variavel A tem um ENTER em cada da linha
A="
9jhkagsdkjhkjhasgdkjhdsag
9jkhdasgdjkhagsdjkhasgdjk
9kjhdsagkjdhgaksjhdgajsghd
9lkjsahdlkjsahlkdjhaslkdjhakls
9jdhsdjhsjdhjshdjshdjshdjs
1dddddddddddddddd
2rrrrrrrrrrrrrrrr"

JUNTA=""
CAMPOS=""
LINHAS=$( echo "$A"| grep -c "^9........j" )

echo "LINHAS=$LINHAS"

echo "$A"| grep "^9........j" | while read LINHA
do
    C1=${LINHA:2:3}
    C2=${LINHA:6:3}
    C3=${LINHA:8:3}
    C4=${LINHA:14:3}

    echo "C1=$C1"
    echo "C2=$C2"
    echo "C3=$C3"
    echo "C4=$C4"

    CAMPOS="${C1}${C2}${C3}${C4}---"
    echo "dentro_CAMPOS=$CAMPOS"

    JUNTA=${JUNTA}${CAMPOS}
    echo "dentro_JUNTA=${JUNTA}"

done

echo "fora_JUNTA=${JUNTA}"
-----------------------------FIM_SCRIPT

resultado aqui:

[geison@mar teste]$ ./teste.sh
LINHAS=4
C1=hka
C2=sdk
C3=kjh
C4=asg
dentro_CAMPOS=hkasdkkjhasg---
dentro_JUNTA=hkasdkkjhasg---
C1=khd
C2=sgd
C3=djk
C4=sdj
dentro_CAMPOS=khdsgddjksdj---
dentro_JUNTA=hkasdkkjhasg---khdsgddjksdj---
C1=jhd
C2=agk
C3=kjd
C4=ksj
dentro_CAMPOS=jhdagkkjdksj---
dentro_JUNTA=hkasdkkjhasg---khdsgddjksdj---jhdagkkjdksj---
C1=dhs
C2=jhs
C3=sjd
C4=hdj
dentro_CAMPOS=dhsjhssjdhdj---
dentro_JUNTA=hkasdkkjhasg---khdsgddjksdj---jhdagkkjdksj---dhsjhssjdhdj---
fora_JUNTA=

??? CADÊ o valor de JUNTA quando sai do loop???


Obrigado.

Geison Farias
Recife - PE








---------------------------------------------------------------------
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
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil


Links do Yahoo! Grupos













reply via email to

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