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

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

RES: [shell-script] como indexar nome de variavel?


From: Julio Cezar Neves - DATAPREVRJ
Subject: RES: [shell-script] como indexar nome de variavel?
Date: Tue, 30 May 2006 16:55:06 -0300

Alfredo,

Vou tentar te explicar legal, mas tem explicação muito melhor em
www.julioneves.com. Entre nesta página e na caixa de texto no canto superior
esquerdo escreva eval. Isto foi feitopara que meu livro on-line possa ser
usado como um manual de referência.
 
Vamos à explicação: para executar uma linha de cmd (então excluindo uma
atribuição), o shell tem a seguinte ordem de prioridade:
1 - Resolução de redirecionamentos;
2 - Resolução de variáveis;
...
N - Manda a linha já toda resolvida para execução.

Sem o eval a linha ficaria assim:

echo $ARQUIVO_0$i

No momento de resolução das variáveis, só havia uma definida que era o $i
(pois a variável $ARQUIVO_0 retorna nulo por não estar definida) e o
resultado disso seria sempre o valor de $i.

O eval, dá 2 passadas na linha de cmd antes de mandar a linha para execução.
Então qdo fazemos:

eval echo \$ARQUIVO_0$i

na primeira passada ele retira a contrabarra e substitui o valor de $i
(digamos 1) e na segunda ele resolve o valor da variável $ARQUIVO_01 (repare
que o $i já foi substituído pelo seu valor).

Suponha que vc tenha a seguinte execução: 
Prompt> pipe='|'
Prompt> ls $pipe wc -l
ls: |: No such file or directory
ls: wc: No such file or directory

Eu queria substituir a variável $pipe pelo seu valor para fazer um ls e
contar a qtd de arquivos, mas os redirecionamentos são resolvidos a priori e
neste momento ainda não tinha redirecinamento algum então eu tenho de fazer:

Prompt> eval ls $pipe wc -l
    107


Julio Cezar Neves
Tel:+55 21 2555-6148 / +55 21 8112-9988
Fax: +55 21 2555-6154
http://www.julioneves.com


| -----Mensagem original-----
| De: Alfredo Casanova [mailto:address@hidden]
| Enviada em: terça-feira, 30 de maio de 2006 14:57
| Para: address@hidden
| Assunto: Re: [shell-script] como indexar nome de variavel?
| 
| 
| O que faz o "eval"? Porque não só o ECHO?
| 
| On 5/30/06, Julio Cezar Neves - DATAPREVRJ 
| <address@hidden>
| wrote:
| >
| > Aê Ricardo,
| > Prompt> ARQUIVO_01=3
| > Prompt> ARQUIVO_02=5
| > Prompt> ARQUIVO_03=9
| > Prompt> for ((i=1; i<=3; i++))
| > > {
| > >     eval echo \$ARQUIVO_0$i;
| > > }
| > 3
| > 5
| > 9
| >
| > [ ]s,
| > Julio Cezar Neves
| > Tel:+55 21 2555-6148 / +55 21 8112-9988
| > Fax: +55 21 2555-6154
| > http://www.julioneves.com
| >
| >
| > | -----Mensagem original-----
| > | De: Ricardo Acosta [mailto:address@hidden]
| > | Enviada em: terça-feira, 30 de maio de 2006 14:12
| > | Para: address@hidden
| > | Assunto: Re: [shell-script] como indexar nome de variavel?
| > |
| > |
| > | ai pessoal. nao é exatamente o mesmo probelma anterior!
| > | é um novo...
| > | mas acho que não entendi o conceito!
| > |
| > | no Script abaixo o que faço para ver a saida
| > | o valor armazenado nas variáveis:
| > | ARQUIVO_0[1-3]
| > |
| > | olhem o que estou fazendo:
| > | ........
| > | acosta@clima:/zdepth2_PDG$ cat plota.gmt.sh
| > | #!/bin/bash
| > | ARQUIVO_01="ano_01_sib2dt.dat"
| > | ARQUIVO_02="ano_02_sib2dt.dat"
| > | ARQUIVO_03="ano_03_sib2dt.dat"
| > |
| > | for i in $(seq 1 3)
| > | do
| > | eval ARQUIVO="ARQUIVO_0"$i
| > | eval echo $ARQUIVO
| > | done
| > | acosta@clima:/zdepth2_PDG$./plota.gmt.sh
| > | ARQUIVO_01
| > | ARQUIVO_02
| > | ARQUIVO_03
| > | ........
| > |
| > | > ----- Original Message -----
| > | > From: "Felipe Kellermann" <address@hidden>
| > | > To: <address@hidden>
| > | > Sent: Friday, May 26, 2006 9:53 PM
| > | > Subject: Re: [shell-script] como indexar nome de variavel?
| > | >
| > | >
| > | > > On Fri, 26 May 2006 6:31pm  -0300, Tiago Barcellos 
| Peczenyj wrote:
| > | > >
| > | > >> ->for i in 1 2 3
| > | > >> do eval "teste_$i=$i"
| > | > >> echo $teste_$i
| > | > >> done
| > | > >>
| > | > >> 1
| > | > >> 2
| > | > >> 3
| > | > >
| > | > > Oops. Engano. Parece estar correto mas nao esta. Precisa
| > | ser eval echo
| > | > > \$teste_$i. Esta mostrando sempre o valor de $fuu_ e de
| > | $i. Juntos formam
| > | > > novamente o 1, 2 e 3.
| > | > >
| > | > > --
| > | > > Felipe Kellermann
| > | > >
| > | > >
| > | > >
| > | 
| ---------------------------------------------------------------------
| > | > > 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
| > | > >
| > | > >
| > | > >
| > | > >
| > | > >
| > | > >
| > | > >
| > | > >
| > | > >
| > | >
| > | >
| > | >
| > | > -------------------------------------------------------
| > | > Esta mensagem foi verificada pelo Anti-Vírus NetUno.
| > | > NetUno Internet - http://www.netuno.com.br
| > | >
| > | >
| > | >
| > | >
| > | 
| ---------------------------------------------------------------------
| > | > 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
| > | >
| > | >
| > | >
| > | >
| > | >
| > | >
| > | >
| > | >
| > | >
| > |
| > |
| > | --
| > | __________________________
| > | Ricardo Acosta
| > | Laboratório de Clima e Biosfera
| > | Departamento de Ciências Atmosféricas - USP/IAG/ACA
| > |
| > |
| > | 
| ---------------------------------------------------------------------
| > | 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
| >
| >
| >
| >
| >
| >
| >
| >
| >
| > 
| ---------------------------------------------------------------------
| > 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
| >
| >
| >
| >
| >
| >
| >
| >
| >
| 
| 
| -- 
| []'s
| Alfredo Casanova
| icq: 15793271
| msn: address@hidden
| aim: alfredotcasanova
| yim: atcasanova2
| tel: +55 61 84137319
| 
| 
| [As partes desta mensagem que não continham texto foram removidas]
| 
| 
| 
| ---------------------------------------------------------------------
| 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]