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

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

Re: [shell-script] expansão de parametros para passar adiante


From: Felipe Kellermann
Subject: Re: [shell-script] expansão de parametros para passar adiante
Date: Wed, 10 Aug 2005 23:13:40 -0300 (BRT)
User-agent: Pine <http://www.washington.edu/pine/>

On Tue, 9 Aug 2005 1:02pm  -0300, Eduardo Jaime Quiros Batres wrote:

> Boa Tarde,
> 
>   Achei esta sintaxe no Linux (várias distribuições):
> 

Boa tarde Eduardo,


> #!/bin/sh
> exec grep -E ${1+"$@"}
> 

Essa pratica comecou a ser usada depois que os Standards GNU recomendam 
que aplicativos nao tomem comportamentos diferenciados dependendo do nome 
pelo qual foram  chamados (p.ex., links de fgrep e egrep para grep). Este 
exemplo seria de um porgrama egrep.


> Alguém poderia me dizer porque não usou: exec grep -E "$@"  , ou seja, 
> não entendi em nada o que o ${1+ faz!

Porque com "$@" estariamos forcando um parametro. Esse 1+ vai verificar se 
o primeiro parametro difere de nulo (um ""). Se sim, usa "$@", se nao, nao 
faz substitui nada.

Normalmente as documentacoes (manuais e eu nao lembro bem se POSIX define 
exatamente este contexto) nao especificam os operadores :- e :+ separados 
nas substituicoes (p.ex., um - ou um +). Ha muitos tempo eu havia enviado 
uma dica sobre isto, deve estar nos archives.

Veja bem: A semantica seria a mesma. No lugar de verificar se o parametro 
EXISTE (foi especificado) e difere de NULO (um parametro "") que seria 
especificado com :+, usamos apenas a segunda parte.


> olhando email sobre zsh que reporta bug com a construção ${1+"$@"}, 
> surge a  questão do porque não  "${1+"$@"}"  (ou seja mais aspas), isto 
> só me fez ficar mais confuso do porque do ${1+

Mesma explicao de antes. Porque desta forma estariamos sempre forcando um 
parametro para o grep que esta sendo encapsulado no programa egrep. Tenta 
trocar para a tua sugestao e tenta chamar o egrep sem parametros...

-- 
Felipe Kellermann


reply via email to

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