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 <[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
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>     
>
>
>   


---------------------------------------------------------------------
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