Provided by: manpages-pt_20040726-2_all bug
 

NOME

        glob - Caminhos de diretórios de englobamento
 

DESCRI O

        Muito  tempo atrás, no Unix V6, havia um programa /etc/glob que poderia
        expandir os padrões de coringas.  Logo em  seguida,  isso  se  tornaria
        embutido no interpretador de comandos.
 
        Nos  dias  de  hoje,  também  há  uma  rotina de biblioteca glob(3) que
        realizará esta função para um programa de usuário.
 
        As regras são as que seguem (POSIX 1003.2, 3.13).
        Uma cadeia de caracteres é um padrão de coringas se contiver um ou mais
        caracteres  ‘?’,  ‘*’  ou ‘[’. Englobamento é a operação que expande um
        padrão de coringas para uma lista de nomes de caminhos que casam com  o
        padrão. Casamento é definido por:
 
        Um ‘?’ (não entre colchetes) casa com qualquer caractere unitário.
 
        Um  ‘*’  (não  entre colchetes) casa com qualquer string, incluindo uma
        cadeia de caracteres  vazia.
 
    Classes de caracteres
        Uma expressão ‘[...]’ onde o primeiro caractere depois do primeiro  ‘[’
        não  é um ‘!’ que casa com um caractere unitário, desde que seja um dos
        caracteres de dentro dos colchetes.  A string cercada  pelos  colchetes
        não  pode  estar  vazia: portanto ‘]’ é um caractere permitido entre os
        colchetes, desde que seja o primeiro caractere. Portanto, ‘[][!]’  casa
        com os três caracteres ‘[’, ‘]’ e ‘!’.)
 
    Faixas
        Há  uma  convenção  especial: dois caracteres separados por ‘-’ denotam
        uma  faixa.   (Portanto,  ‘[A-Fa-f0-9]’  é  equivalente   a    ‘[ABCDE‐
        Fabcdef0123456789]’.)   É possível incluir ‘-’ com seu significado lit‐
        eral ao colocá-lo em primeiro ou em último entre os  caracteres  dentro
        dos  colchetes.   (Portanto,  ‘[]-]’ casa apenas com os dois caracteres
        ‘]’ e ‘-’, e ‘[--/]’ casa com os três caracteres ‘-’, ‘.’, ‘/’.)
 
    Complementa      o
        Uma expressão ‘[!...]’ casa com um caractere unitário, desde  que  seja
        um  caractere não presente na expressão obtida pela remoção do primeiro
        ‘!’.  (Portanto, ‘[!]a-]’ casa com qualquer caractere unitário,  exceto
        ‘]’, ‘a’ e ‘-’.)
 
        É possível remover o significado especial de ‘?’, ‘*’ e ‘[’ precedendo-
        os por uma barra invertida, ou, caso seja parte de uma linha de comando
        do  shell,  cercando-os  com  aspas.  Entre colchetes, estes caracteres
        respondem por eles mesmos.  Portanto, ‘[[?*\]’ casa com os quatro  car‐
        acteres ‘[’, ‘?’, ‘*’ e ‘\’.
        Englobamento  é  a  aplicação  de cada um dos componentes de um nome de
        caminho separadamente. Um ‘/’ em um nome de caminho não pode casar  com
        um  coringa  ‘?’  ou  ‘*’, ou com uma faixa como ‘[.-0]’. Uma faixa não
        pode conter um caractere ‘/’ explícito; isto levaria a um erro de  sin‐
        taxe.
 
        Se um nome de arquivo começa com um ‘.’, este caractere deve ser casado
        explicitamente.  (Portanto, ‘rm *’ não removerá .profile, e ‘tar  c  *’
        não arquivará todos os seus arquivos: ‘tar c .’ é melhor.)
        A  bela  e  simples regra dada acima: ‘expanda um padrão de coringas na
        lista de caminhos de diretório de casamento’ foi a definição padrão  do
        Unix. Ela permite padrões que se expandam para uma lista vazia, como em
             xv -wait 0 *.gif *.jpg
        onde talvez nenhum arquivo *.gif esteja  presente  (e  isto  não  é  um
        erro).   Porém,  o  POSIX requer que um padrão de coringas seja deixado
        inalterado quando estiver sintaticamente incorreto, ou a lista de nomes
        de  caminhos  esteja  vazia.   Com  bash pode-se forçar o comportamento
        clássico, setando-se allow_null_glob_expansion=true.
 
        (Problemas similares ocorrem em toda a parte. Por exemplo, onde  há  em
        scripts antigos
             rm ‘find . -name "*~"‘
        os novos scripts requerem
             rm -f nosuchfile ‘find . -name "*~"‘
        para evitar mensagens de erro de rm chamado com uma lista de argumentos
        vazia.)
 

NOTAS

    Express   es regulares
        Note que padrões de coringas não são expressões  regulares,  apesar  de
        que  são  um  pouco  similares.  Primeiramente, eles casam com nomes de
        arquivos em vez de texto, e em segundo lugar, as convenções não são  as
        mesmas:  por  exemplo,  em  uma expressão regular ‘*’ significa zero ou
        mais cópias da coisa precedente.
 
        Agora que as expressões regulares têm expressões com colchetes, onde  a
        negação  é  indicada  por  um  ‘^’, o POSIX declarou que o efeito de um
        padrão de coringa ‘[^...]’ é indefinido.
 
    Classes de caracteres e Internationaliza      o
        Obviamente, faixas significavam originalmente as faixas ASCII, de forma
        que  ‘[  -%]’  significa ‘[ !"#$%]’ e ‘[a-z]’ significa "qualquer letra
        minúscula".  Algumas implementações Unix  generalizaram  isso,  de  tal
        forma  que  que  uma  faixa  X-Y significa o conjunto de caracteres com
        código entre o código de X e o de Y. Porém, isso requer que  o  usuário
        saiba  o código do caractere em uso no sistema local, e além disso, não
        é conveniente se a seqüência  de  conferência  para  o  alfabeto  local
        difere da ordenação dos códigos de caractere.  Portanto, POSIX estendeu
        grandemente a notação de  colchetes,  tanto  nos  padrões  de  coringas
        quanto  nas  expressões regulares.  Anteriormente, nós vimos três tipos
        de itens que podem  ocorrer  em  uma  expressão  em  colchetes:  (i)  a
        negação,  (ii)  caracteres unitários explicitados e (iii) faixas. POSIX
        especifica faixas de uma forma internacionalmente mais útil,  e  acres‐
        centa mais três tipos:
 
        (iv)  Faixas  X-Y  compreendem  todos os caractees que caem entre X e Y
        (inclusive) na seqüência de conferência corrente,  como  definido  pela
        categoria LC_COLLATE no locale corrente.
 
        (iv) Classes nomeadas de caracteres, como
        [:alnum:]  [:alpha:]  [:blank:]  [:cntrl:]
        [:digit:]  [:graph:]  [:lower:]  [:print:]
        [:punct:]  [:space:]  [:upper:]  [:xdigit:]
        ,  de  forma que se pode dizer ‘[[:lower:]]’ (minúsculo) em vez de ‘[a-
        z]’, e funciona na Dinamarca também, onde há três letras depois do  ‘z’
        no  alfabeto.  Essas classes de caracteres são definidas pela categoria
        LC_CTYPE na localização atual.
 
        (v) Símbolos de conferência, como ‘[.ch.]’  ou  ‘[.a-acute.]’,  onde  a
        string  entre  ‘[.’  e  ‘.]’  é  um elemento de conferência definido na
        localização atual. Note que este pode ser um elemento  multi-caractere.
 
        (vi) Expressões de classes de equivalência, como ‘[=a=]’, onde a string
        entre ‘[=’ e ‘=]’ é um elemento de conferência qualquer da  sua  classe
        de  equivalência,  como  é  definido  no  locale corrente. Por exemplo,
        ‘[[=a=]]’ deve ser equivalente a ‘[aáàäâ]’ (cuidado: Latin-1 aqui),  ou
        seja, a ‘[a[.a-acute.][.a-grave.][.a-umlaut.][.a-circumflex.]]’.
        sh(1), glob(3), fnmatch(3), locale(7), regex(7)
        Rubens  de Jesus Nogueira <darkseid99@usa.net> (tradução) André L. Fas‐
        sone Canova <lonelywolf@blv.com.br> (revisão)