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).

CASAMENTO DE CORINGAS

       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
       ‘[ABCDEFabcdef0123456789]’.)    É   possível   incluir   ‘-’   com  seu
       significado literal 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
       caracteres ‘[’, ‘?’, ‘*’ e ‘\’.

NOMES DE CAMINHOS

       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
       sintaxe.

       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.)

LISTAS VAZIAS

       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
       acrescenta 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.]]’.

VEJA TAMBÉM

       sh(1), glob(3), fnmatch(3), locale(7), regex(7)

TRADUZIDO POR LDP-BR em 21/08/2000.

       Rubens de  Jesus  Nogueira  <darkseid99@usa.net>  (tradução)  André  L.
       Fassone Canova <lonelywolf@blv.com.br> (revisão)