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