1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188
|
.\" -*- nroff -*-
.\" Copyright (c) 1998 Andries Brouwer
.\"
.\" This is free documentation; you can redistribute it and/or
.\" modify it under the terms of the GNU General Public License as
.\" published by the Free Software Foundation; either version 2 of
.\" the License, or (at your option) any later version.
.\"
.\" The GNU General Public License's references to "object code"
.\" and "executables" are to be interpreted as the output of any
.\" document formatting or typesetting system, including
.\" intermediate and printed output.
.\"
.\" This manual is distributed in the hope that it will be useful,
.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
.\" GNU General Public License for more details.
.\"
.\" You should have received a copy of the GNU General Public
.\" License along with this manual; if not, write to the Free
.\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111,
.\" USA.
.\"
.TH GLOB 7 "12/06/1998" "Unix" "Manual do Programador Linux"
.SH NOME
glob \- Caminhos de diretrios de englobamento
.SH DESCRIO
Muito tempo atrs, no Unix V6, havia um programa
.I /etc/glob
que poderia expandir os padres de coringas.
Logo em seguida, isso se tornaria embutido no interpretador de comandos.
Nos dias de hoje, tambm h uma rotina de biblioteca
.BR glob (3)
que realizar esta funo para um programa de usurio.
As regras so as que seguem (POSIX 1003.2, 3.13).
.SH "CASAMENTO DE CORINGAS"
Uma cadeia de caracteres um padro de coringas se contiver um
ou mais caracteres `?', `*' ou `['. Englobamento a operao
que expande um padro de coringas para uma lista de nomes de caminhos
que casam com o padro. Casamento definido por:
Um `?' (no entre colchetes) casa com qualquer caractere unitrio.
Um `*' (no entre colchetes) casa com qualquer string,
incluindo uma cadeia de caracteres vazia.
.SS "Classes de caracteres"
Uma expresso `[...]' onde o primeiro caractere depois do
primeiro `[' no um `!' que casa com um caractere unitrio,
desde que seja um dos caracteres de dentro dos colchetes.
A string cercada pelos colchetes no pode estar vazia:
portanto `]' um caractere permitido entre os colchetes,
desde que seja o primeiro caractere. Portanto, `[][!]' casa
com os trs caracteres `[', `]' e `!'.)
.SS Faixas
H uma conveno especial:
dois caracteres separados por `-' denotam uma faixa.
(Portanto, `[A-Fa-f0-9]' equivalente a `[ABCDEFabcdef0123456789]'.)
possvel 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 trs caracteres `-', `.', `/'.)
.SS Complementao
Uma expresso `[!...]' casa com um caractere unitrio, desde que
seja um caractere no presente na expresso obtida
pela remoo do primeiro `!'.
(Portanto, `[!]a-]' casa com qualquer caractere unitrio, exceto `]', `a' e `-'.)
possvel 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, `[[?*\e]' casa com os quatro caracteres `[', `?', `*' e `\e'.
.SH NOMES DE CAMINHOS
Englobamento a aplicao de cada um dos componentes de um nome de
caminho separadamente. Um `/' em um nome de caminho no pode casar com um coringa `?' ou `*',
ou com uma faixa como `[.-0]'. Uma faixa no pode conter um caractere `/'
explcito; isto levaria a um erro de sintaxe.
Se um nome de arquivo comea com um `.', este caractere deve ser casado explicitamente.
(Portanto, `rm *' no remover .profile, e `tar c *' no
arquivar todos os seus arquivos: `tar c .' melhor.)
.SH "LISTAS VAZIAS"
A bela e simples regra dada acima: `expanda um padro de coringas na lista
de caminhos de diretrio de casamento' foi a definio padro do
Unix. Ela permite padres que se expandam para
uma lista vazia, como em
.br
.nf
xv -wait 0 *.gif *.jpg
.fi
onde talvez nenhum arquivo *.gif esteja presente (e isto no
um erro).
Porm, o POSIX requer que um padro de coringas seja deixado
inalterado quando estiver sintaticamente incorreto, ou a lista
de nomes de caminhos esteja vazia.
Com
.I bash
pode-se forar o comportamento clssico, setando-se
.IR allow_null_glob_expansion=true .
(Problemas similares ocorrem em toda a parte. Por exemplo, onde h em scripts antigos
.br
.nf
rm `find . -name "*~"`
.fi
os novos scripts requerem
.br
.nf
rm -f nosuchfile `find . -name "*~"`
.fi
para evitar mensagens de erro de
.I rm
chamado com uma lista de argumentos vazia.)
.SH NOTAS
.SS Expresses regulares
Note que padres de coringas no so expresses regulares,
apesar de que so um pouco similares. Primeiramente, eles casam com
nomes de arquivos em vez de texto, e em segundo lugar, as convenes
no so as mesmas: por exemplo, em uma expresso regular `*' significa zero ou
mais cpias da coisa precedente.
Agora que as expresses regulares tm expresses com colchetes, onde
a negao indicada por um `^', o POSIX declarou que o
efeito de um padro de coringa `[^...]' indefinido.
.SS Classes de caracteres e Internationalizao
Obviamente, faixas significavam originalmente as faixas ASCII,
de forma que `[ -%]' significa `[ !"#$%]' e `[a-z]' significa
"qualquer letra minscula".
Algumas implementaes Unix generalizaram isso, de tal forma que que uma
faixa X-Y significa o conjunto de caracteres com cdigo entre o cdigo
de X e o de Y. Porm, isso requer que o usurio saiba o
cdigo do caractere em uso no sistema local, e alm disso, no
conveniente se a seqncia de conferncia para o alfabeto local
difere da ordenao dos cdigos de caractere.
Portanto, POSIX estendeu grandemente a notao de colchetes,
tanto nos padres de coringas quanto nas expresses regulares.
Anteriormente, ns vimos trs tipos de itens que podem ocorrer em uma
expresso em colchetes: (i) a negao, (ii) caracteres unitrios
explicitados e (iii) faixas. POSIX especifica faixas de uma forma
internacionalmente mais til, e acrescenta mais trs tipos:
(iv) Faixas X-Y compreendem todos os caractees que caem entre X
e Y (inclusive) na seqncia de conferncia corrente, como definido
pela categoria LC_COLLATE no locale corrente.
(iv) Classes nomeadas de caracteres, como
.br
.nf
[:alnum:] [:alpha:] [:blank:] [:cntrl:]
[:digit:] [:graph:] [:lower:] [:print:]
[:punct:] [:space:] [:upper:] [:xdigit:]
.fi
, de forma que se pode dizer `[[:lower:]]' (minsculo) em vez de `[a-z]',
e funciona na Dinamarca tambm, onde h trs letras depois do `z' no
alfabeto.
Essas classes de caracteres so definidas pela categoria LC_CTYPE
na localizao atual.
(v) Smbolos de conferncia, como `[.ch.]' ou `[.a-acute.]',
onde a string entre `[.' e `.]' um elemento de conferncia
definido na localizao atual. Note que este pode ser um
elemento multi-caractere.
(vi) Expresses de classes de equivalncia, como `[=a=]',
onde a string entre `[=' e `=]' um elemento de conferncia
qualquer da sua classe de equivalncia, 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 "VEJA TAMBM"
.BR sh (1),
.BR glob (3),
.BR fnmatch (3),
.BR locale (7),
.BR regex (7)
.SH TRADUZIDO POR LDP-BR em 21/08/2000.
\&\fR\&\f(CWRubens de Jesus Nogueira <darkseid99@usa.net> (traduo)\fR
\&\fR\&\f(CWAndr L. Fassone Canova <lonelywolf@blv.com.br> (reviso)\fR
|