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 <[EMAIL PROTECTED]> 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:
>
> [EMAIL PROTECTED] 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: [EMAIL PROTECTED]
> ---------------------------------------------------------------------
> 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
>
>
>
>
>
>
>
>
>


-- 
Tiago B Peczenyj
Linux User #405772

# cd /pub
# more beer


---------------------------------------------------------------------
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: [EMAIL PROTECTED]
---------------------------------------------------------------------
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

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/shell-script/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 



Responder a