[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RES: [shell-script] Comando eval
From: |
Julio Cezar Neves - DATAPREVRJ |
Subject: |
RES: [shell-script] Comando eval |
Date: |
Thu, 3 Oct 2002 10:29:08 -0300 |
O shell tem seu tempo certo para cada coisa. Então suas tarefas são
executadas na seguinte ordem:
1 - Exame da linha de comando - Verifica se é um comando ou uma atribuição
(o que destingue é que atribuição não pode ter espaços em branco);
2 - Caso seja cmd, ele faz:
2.1 - Resolução dos redirecionamentos;
2.2 - Substituição de variáveis;
2.3 - Substituição de meta caracteres (coringas);
2.4 - Manda a linha já toda "mastigada" para o kernel.
Desta forma se vc desejar inverter esta ordem, vc não conseguirá, seria
necessário um cmd que dê uma 1a. passada fazendo tudo até o 2.3 e desse
outra passada indo até o fim do ciclo. Ex:
$ pipe=\|
$ ls $pipe wc -l
ls: |: No such file or directory
ls: wc: No such file or directory
No ex acima eu gostaria de ter feito um "ls | wc -l", não consegui pq o
redirecinamento é feito antes da resolução das variáveis. Desta forma qdo
apareceu o "|", já era tarde demais. Então qual é a saída?
$ eval ls $pipe wc -l
22
Na primeira passada a linha foi montada e na segunda foi executada. Outro
exemplo:
$ a=f\*
$ b='ls -a $a'
$ $b
ls: $a: No such file or directory
$ eval $b
fifo1 fifo2.Z
Tente fazer um script que gere o seguinte resultado:
Recebi os seguintes parametros:
Parametro 1 = parm1
Parametro 2 = parm2
...
...
Parametro n = parmn
Tente 1o. sem eval e depois com eval.
[ ]s,
Julio Cezar Neves
-Eu Apoio o Software Livre-
-I Support Free Software-
* +55 21 2528-7070 / 9853-4044
*address@hidden
> -----Mensagem original-----
> De: DyNaMiTe [mailto:address@hidden]
> Enviada em: quinta-feira, 3 de outubro de 2002 09:02
> Para: address@hidden
> Assunto: [shell-script] Comando eval
>
>
> Júlio,
>
> Eu li a sua explicação e o comando eval pra mim é quase um
> mistério, ainda
> não compreendi direito quando deve ser utilizado. (sei que
> esta não é a
> pergunta do Luís, mas é uma curiosidade minha)
>
> ----- Original Message -----
> From: "Julio Cezar Neves - DATAPREVRJ"
> <address@hidden>
> To: <address@hidden>
> Sent: Wednesday, October 02, 2002 5:33 PM
> Subject: [shell-script] Exibir conteúdo de variável cujo nome
> está em outra
> veriável
>
>
> Luís, observe a sequência de comandos:
>
> Prompt> b=2
> Prompt> a=b
> Prompt> echo \$$a
> $b
> Prompt> eval echo \$$a
> 2
>
> Qdo eu fiz echo \$$b eu "escapei" o 1o. $ e recebi um $b.
> Para receber o
> valor deste $b é necessário que o comando seja re-executado.
> Para isso é que
> se usa o eval.
>
> Se entendi bem o seu problema, o ??? deveria ser substituído por:
> $(eval echo \$$GRP)
>
> Se não for isso avise.
>
> [ ]s,
> Julio Cezar Neves
> -Eu Apoio o Software Livre-
> -I Support Free Software-
> * +55 21 2528-7070 / 9853-4044
> *address@hidden
>
>
>
>
>
>
> ---------------------------------------------------------------------
> 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.listasdiscussao.cjb.net
---------------------------------------------------------------------
Seu uso do Yahoo! Grupos é sujeito às regras descritas em:
http://br.yahoo.com/info/utos.html
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- RES: [shell-script] Comando eval,
Julio Cezar Neves - DATAPREVRJ <=