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

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

Re: [shell-script] logica


From: opa
Subject: Re: [shell-script] logica
Date: Wed, 02 Jun 2004 11:08:49 -0300 hrN

Acredito que o problema do Eric está resolvido faz tempo, mas achei 
interessante compartilhar isto.

O Felipe me lembrou que o comportamento, às vezes inesperado, do 
echo quando o parâmetro não recebe aspas ou apóstrofos, pode aqui 
ser aplicado.

echo $(</tmp/valores)|tr ' ' +|bc

echo $(($(echo $(</tmp/valores)|tr ' ' +)))

Nas duas linhas acima o póprio echo converte os "\n" em " ", eliminando os " " 
duplicados e aquele ao final da linha, dispensando o zero complementear.

Inclusive experimentei, não sabia, o tr pode fazer substituições e limitar a um 
o número de bytes adjacentes idênticos, simultaneamente. Ou seja, meu 
comentário anterior, com um "tr -s" adicional, esqueçam, o tr pode fazer tudo 
numa única chamada:

$ echo "1 2     3  4 "|tr " " +
1+2+++++3++4+

$ echo "1 2     3  4 "|tr -s " " +
1+2+3+4+

Até me empolguei e dei uma espiada no man, por alto. Acho que numa única 
chamada pode fazer muito mais coisas.

E mais, notei que o tratamento matemático do shell tolera "+" sem operando, 
ou seja não é preciso tirar as sequências ++++. :)
Infelizmente isso não se verifica ao final. :(

$ echo $((2++++++++2))
4

$ echo $((2++++++++2+))
bash: 2++++++++2+: syntax error: operand expected (error token is "+")

Mas como isto é shell, outro shell pode ter comportamento distinto.

Quanto já aprendi com esta simples questão colocada. :)

Viva o maravilhoso mundo "u"!


------------------------------------------------------------------
>From: Felipe Kellermann <address@hidden>
>Date: Tue, 1 Jun 2004 19:19:24 -0300 (BRT)
>
>Em zsh, para um arquivo (linhas em branco de propósito):
>
>% < val
>1
>2
>
>3
>
>
>4
>%
>
>
>Tu pode substituir, por exemplo:
>
>% echo ${(j:+:)$(<val)}
>1+2+3+4
>%
>
>
>Depois é só `(e)valuate' esse resultado, que poderia ser uma substituição 
>direta nessa expressão
>
>-- 
>Felipe Kellermann




reply via email to

[Prev in Thread] Current Thread [Next in Thread]