On Wed, 1 Mar 2006 11:38am  -0300, Eriberto wrote:

> lua:~# ls
> mala  mela  taco  testa  teste  todos
> 
> lua:~# ls | grep te
> testa  teste
> 
> lua:~# ls | grep te*
> 
> O último comanado não mostrou nada. Ele não deveria interpretar como o 
> "e", aparecendo de 0 a n vezes, e mostrar "taco  testa  teste  todos"???

O que está acontecendo é que o shell vai expandir (globbing) esse teu te*.

O `ls' faz um teste para ver se ele está enviando os resultados para um 
terminal ou não. Se não está, ele faz algumas modificações no compotamento 
dele por opções implícitas (por exemplo, umas das opções implícitas 
adicionadas é -1). Exemplo:

  $ ls
  mala  mela  taco  testa  teste  todos
  $ ls | cat -n
     1  mala
     2  mela
     3  taco
     4  testa
     5  teste
     6  todos


O teu te* vai expandir para "testa teste":

  $ echo te*
  testa teste


E, portanto, teu comando final é este, substituindo o glob (te*):

  ls | grep testa teste


Não tem nenhum arquivo com o nome "testa teste", e por isso não mostra 
nada. A minha única curiosidade é entender o motivo de tu precisar estar 
usando grep para procurar os arquivos. Em geral é interessante, melhor e 
mais limpo usar só glob. Quanto mais flexível é o globbing do shell, mais 
interessante, útil e poderoso é o ambiente.

Por exemplo:
  $ arquivos=(te*)

Ou

  $ for in te*; { ... }  


OBS: E a interpretação não é de "`e' zero ou mais". Há diferenças entre 
expressões regulares e globbing. Em um glob o teu "te*" significa apenas o 
literal "te" seguido de qualquer coisa.

-- 
Felipe Kellermann


---------------------------------------------------------------------
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: [EMAIL PROTECTED]
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em 
http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil

 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/shell-script/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 


Responder a