Provided by: manpages-pt_20040726-5_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)

Unix                                               12/06/1998                                            GLOB(7)