[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