[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Curiosidade sobre comando IF "disfarçado"
From: |
Rodolfo Villanova |
Subject: |
Curiosidade sobre comando IF "disfarçado" |
Date: |
Wed, 21 Jun 2000 17:39:39 -0300 |
Essa mensagem era para ser enviada ao Júlio Neves, assinante desta lista,
mas segundo o System Administrator [address@hidden] sua
caixa de e-mail deve estar com problemas:
--------------------
Your message
To: address@hidden
Subject: Curiosidade sobre comando IF disfarçado
Sent: Wed, 21 Jun 2000 16:42:41 -0300
did not reach the following recipient(s):
Julio Cezar Neves - DISB.O on Wed, 21 Jun 2000 16:51:20 -0300
The recipient was unavailable to take delivery of the message
The MTS-ID of the original message is: c=BR;a=
;p=Previdencia;l=WTRJO0740006211951N2BMPASP
MSEXCH:MSExchangeMTA:RJ:WTRJO077
-------------------
Assim, como a questão que irei colocar não é particular, e aborda a forma
como o interpretador shell executa uma expressão lógica, segue o texto.
A propósito, aos listeiros mais recentes da lista, a apostila referida no
texto a seguir é de autoria do Julio Cesar Neves, e ele mesmo enviou à lista
shell-script dois capÃtulos para nosso enriquecimento técnico sobre o
assunto.
------------------
Reexaminando a secção 4.3 da tua apostila, ref. ao "if disfarçado",
chamou-me a atenção as formas diferentes como o interpretador shell encara a
prioridade de avaliação das expressões com operadores lógicos.
No caso do teste do IF "explÃcito" contendo os operadores lógicos, como no
último exemplo da secção 4.2.4, a expressão com o operador AND é avaliado
primeiro, e a seguir, as expressões com comandos OR, da esquerda para a
direita.
Por isso, a necessidade da polÃtica de priorização com parênteses:
if [ \( $sexo -eq 1 -o $sexo -eq 2 \) -a \( $nome = Joao -o $nome
= Maria \) ]
Já no caso de IF "implÃcito" (secção 4.3), a prioridade de interpretação é
da esquerda para a direita.
Assim, na linha que exemplificas
[ -d "$MeuDir" ] || mkdir $MeuDir && cd $MeuDir
por analogia não deveria ser interpretada primeiro a expressão "mkdir
$Meudir && cd $MeuDir" ?
Se o interpretador fosse coerente, deveria ser obrigatório digitarmos a
linha assim:
( [ -d "$MeuDir" ] || mkdir $MeuDir ) && cd $MeuDir
O engraçado é que o resultado da execução é identico para ambas as formas de
redação da linha.
Concordas com meu raciocÃnio?
Será isso uma incoerência do interpretador ou um equÃvoco de interpretação
(minha, não do shell...!) ?
Rodolfo
[Non-text portions of this message have been removed]
- Curiosidade sobre comando IF "disfarçado",
Rodolfo Villanova <=