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