glob(7) Miscellaneous Information Manual glob(7) NOME glob - Caminhos de diretorios de englobamento DESCRICAO Muito tempo atras, no Unix V6, havia um programa /etc/glob que poderia expandir os padroes de coringas. Logo em seguida, isso se tornaria embutido no interpretador de comandos. Nos dias de hoje, tambem ha uma rotina de biblioteca glob(3) que realizara esta funcao para um programa de usuario. As regras sao as que seguem (POSIX.2, 3.13). Wildcard matching Uma cadeia de caracteres e um padrao de coringas se contiver um ou mais caracteres '?', '*', ou '['. Englobamento e a operacao que expande um padrao de coringas para uma lista de nomes de caminhos que casam com o padrao. Casamento e definido por: Um '?' (nao entre colchetes) casa com qualquer caractere unitario. Um '*' (nao entre colchetes) casa com qualquer cadeia de caracteres, incluindo uma cadeia de caracteres vazia. Classes de caracteres Uma expressao "[...]" onde o primeiro caractere depois do primeiro '[' nao e um '!' que casa com um caractere unitario, desde que seja um dos caracteres de dentro dos colchetes. A string cercada pelos colchetes nao pode estar vazia: portanto ']' e um caractere permitido entre os colchetes, desde que seja o primeiro caractere. Portanto, "[][!]" casa com os tres caracteres '[', ']' e '!'.) Faixas There is one special convention: two characters separated by '-' denote a range. (Thus, "[A-Fa-f0-9]" is equivalent to "[ABCDEFabcdef0123456789]".) One may include '-' in its literal meaning by making it the first or last character between the brackets. (Thus, "[]-]" matches just the two characters ']' and '-', and "[--0]" matches the three characters '-', '.', and '0', since '/' cannot be matched.) Complementacao Uma expressao "[!...]" casa com um caractere unitario, desde que seja um caractere nao presente na expressao obtida pela remocao do primeiro '!'. (Portanto, `[!]a-]' casa com qualquer caractere unitario, exceto ']', 'a' e '-'.) E possivel 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 '\'. Pathnames Globbing is applied on each of the components of a pathname separately. A '/' in a pathname cannot be matched by a '?' or '*' wildcard, or by a range like "[.-0]". A range containing an explicit '/' character is syntactically incorrect. (POSIX requires that syntactically incorrect patterns are left unchanged.) Se um nome de arquivo comeca com um '.', este caractere deve ser casado explicitamente. (Portanto, rm * nao removera .profile, e tar c * nao arquivara todos os seus arquivos: tar c . e melhor.) Empty lists A bela e simples regra dada acima: "expanda um padrao de coringas na lista de caminhos de diretorio de casamento" foi a definicao padrao do UNIX. Ela permite padroes que se expandam para uma lista vazia, como em xv -wait 0 *.gif *.jpg where perhaps no *.gif files are present (and this is not an error). However, POSIX requires that a wildcard pattern is left unchanged when it is syntactically incorrect, or the list of matching pathnames is empty. With bash one can force the classical behavior using this command: shopt -s nullglob (Problemas similares ocorrem em toda a parte. Por exemplo, onde ha 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 Expressoes regulares Note que padroes de coringas nao sao expressoes regulares, apesar de que sao um pouco similares. Primeiramente, eles casam com nomes de arquivos em vez de texto, e em segundo lugar, as convencoes nao sao as mesmas: por exemplo, em uma expressao regular '*' significa zero ou mais copias da coisa precedente. Agora que as expressoes regulares tem expressoes com colchetes, onde a negacao e indicada por um '^', o POSIX declarou que o efeito de um padrao de coringa "[^...]" e indefinido. Classes de caracteres e internationalizacao Obviamente, faixas significavam originalmente as faixas ASCII, de forma que "[ -%]" significa "[ !"#$%]" e "[a-z]" significa "qualquer letra minuscula". Algumas implementacoes UNIX generalizaram isso, de tal forma que que uma faixa X-Y significa o conjunto de caracteres com codigo entre o codigo de X e o de Y. Porem, isso requer que o usuario saiba o codigo do caractere em uso no sistema local, e alem disso, nao e conveniente se a sequencia de conferencia para o alfabeto local difere da ordenacao dos codigos de caractere. Portanto, POSIX estendeu grandemente a notacao de colchetes, tanto nos padroes de coringas quanto nas expressoes regulares. Anteriormente, nos vimos tres tipos de itens que podem ocorrer em uma expressao em colchetes: (i) a negacao, (ii) caracteres unitarios explicitados e (iii) faixas. POSIX especifica faixas de uma forma internacionalmente mais util, e acrescenta mais tres tipos: (iii) Faixas X-Y compreendem todos os caractees que caem entre X e Y (inclusive) na sequencia de conferencia corrente, como definido pela categoria LC_COLLATE na localizacao atual. (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:]]" (minusculo) em vez de "[a-z]", e funciona na Dinamarca tambem, onde ha tres letras depois do 'z' no alfabeto. Essas classes de caracteres sao definidas pela categoria LC_CTYPE na localizacao atual. (v) Simbolos de conferencia, como "[.ch.]" ou "[.a-acute.]", onde a string entre "[." e ".]" e um elemento de conferencia definido na localizacao atual. Note que este pode ser um elemento multi-caractere. (vi) Expressoes de classes de equivalencia, como "[=a=]", onde a string entre "[=" e "=]" e um elemento de conferencia qualquer da sua classe de equivalencia, como e definido no localizacao atual. Por exemplo, "[[=a=]]" deve ser equivalente a "[aaaaa]" (cuidado: Latin-1 aqui), ou seja, a "[a[.a-acute.][.a-grave.][.a-umlaut.][.a-circumflex.]]". VEJA TAMBEM sh(1), fnmatch(3), glob(3), locale(7), regex(7) TRADUCAO A traducao para portugues brasileiro desta pagina man foi criada por Rubens de Jesus Nogueira e Andre Luiz Fassone Esta traducao e uma documentacao livre; leia a Licenca Publica Geral GNU Versao 3 ou posterior para as condicoes de direitos autorais. Nenhuma responsabilidade e aceita. Se voce encontrar algum erro na traducao desta pagina de manual, envie um e-mail para a lista de discussao de tradutores . Linux man-pages 6.06 31 outubro 2023 glob(7)