Provided by:
manpages-es_1.55-10_all 
NOMBRE
glob - Generacion de nombres de rutas de ficheros
DESCRIPCI'ON
Hace mucho tiempo, en Unix V6, habia un programa en /etc/glob que
expandia patrones con comodines. Poco despues este programa se
convirtio en una orden incorporada en el shell.
Hogano existe tambien una rutina de biblioteca glob(3) que efectua esta
funcion para un programa de usuario.
Las reglas son como sigue (POSIX 1003.2, 3.13).
CONCORDANCIA DE COMODINES
Una cadena de caracteres es un patron con comodines si contiene uno al
menos de los caracteres `?', `*' o `['. La generacion de nombres de
caminos (en ingles, `globbing') es la operacion que expande un patron
con comodines formando una lista de nombres de caminos de ficheros que
concuerdan con el patron. La concordancia se define asi:
Un signo de cierre de interrogacion `?' (no entre corchetes) concuerda
con cualquier caracter simple.
Un asterisco `*' (no entre corchetes) concuerda con cualquier cadena de
caracteres, incluyendo la cadena vacia.
Clases de caracteres
Una expresion entre corchetes `[...]' donde el primer caracter tras el
corchete de apertura `[' no es un signo de cierre de admiracion `!',
concuerda con un caracter simple; a saber, cualquiera de los caracteres
encerrados entre los corchetes. La cadena encerrada entre los
corchetes no puede estar vacia; por ello, el corchete de cierre `]'
puede estar entre los corchetes, siempre que sea como el primer
caracter. (Asi, `[][!]' concuerda con uno de los tres caracteres `['.
`]' y `!'.)
Rangos
Existe un convenio especial: dos caracteres separados por el guion `-'
denotan un rango. (Asi, `[A-Fa-f0-9]' es equivalente a
`[ABCDEFabcdef0123456789]'.) Se puede incluir el guion `-' con su
sentido literal poniendolo como el primer o el ultimo caracter entre
los corchetes. (Asi, `[]-]' concuerda justo con uno de los dos
caracteres `]' o `-', y `[--/]' concuerda con uno de los tres
caracteres `-', `.', ' /'.)
Complementaci'on
Una expresion `[!...]' concuerda con un caracter simple; a saber,
cualquier caracter que no concuerde con la expresion obtenida al quitar
el primer cierre de admiracion `!' de ella. (Asi, `[!]a-]' concuerda
con cualquier caracter simple excepto `]', `a' y `-'.)
Uno puede anular el significado especial de `?', `*' y `[' haciendolos
preceder de una barra inclinada invertida `\', o, en caso de formar
parte de una orden del shell, encerrandolos entre comillas. Entre
corchetes, estos caracteres se representan a si mismos. Asi, `[[?*\]'
concuerda con uno de los cuatro caracteres `[', `?', `*' y `\'.
NOMBRES DE CAMINOS
La expansion se aplica a cada uno de los componentes de un nombre de
camino por separado. Una barra inclinada `/' en un nombre de camino no
puede concordar con un comodin `?' ni `*', ni con un rango como
`[.-0]'. Un rango no puede contener un caracter `/' explicito; esto
llevaria a un error de sintaxis.
Si un nombre de fichero comienza con un punto `.', este caracter debe
concordar explicitamente. (Asi, `rm *' no borrara, por ejemplo,
.profile, y `tar -c *' no archivara todos sus ficheros; `tar -c .' es
mejor.)
LISTAS VAC'IAS
La bonita y simple regla dada arriba: `expandir un patron de comodines
a una lista de nombres de caminos que concuerdan' fue la definicion
original de Unix. Le permitia a uno tener patrones que se `expandian' a
una lista vacia, como en
xv -wait 0 *.gif *.jpg
donde quizas no habia ningun fichero GIF presente (y esto no es un
error). Sin embargo, POSIX requiere que un patron de comodines se deje
sin cambios cuando sea sintacticamente incorrecto o cuando la lista de
nombres de camino concordantes este vacia. Con bash uno puede forzar
el comportamiento clasico estableciendo allow_null_glob_expansion=true
y con zsh con setopt null_glob. (Problemas similares ocurren por todas
partes. Por ejemplo, donde guiones viejos tengan
rm `find . -name "*~"`
los nuevos requeriran
rm -f no-tal-fichero `find . -name "*~"`
para evitar mensajes de error de rm llamado con una lista de argumentos
vacia.)
OBSERVACIONES
Expresiones regulares
Observe que los patrones de comodines no son expresiones regulares,
aunque son algo similares. Lo primero, concuerdan con nombres de
ficheros en vez de con texto, y lo segundo, los convenios no son los
mismos: p.ej., en una expresion regular `*' significa cero o mas copias
de lo precedente.
Ahora que las expresiones regulares tienen expresiones de corchetes
donde la negacion se indica por un acento circunflejo `^', POSIX ha
declarado que el efecto de un patron `[^...]' esta indefinido. En zsh
tiene el mismo efecto que `[!...]'.
Clases de caracteres e internacionalizaci'on
Por supuesto los rangos significaban originalmente rangos ASCII, asi
que `[ -%]' significaba `[ !"#$%]' y `[a-z]' queria decir "cualquier
letra minuscula". Algunas implementaciones de Unix generalizaron esto
de forma que un rango X-Y significara el conjunto de caracteres cuyos
codigos estuvieran entre los de X y los de Y. Sin embargo, esto
requiere que el usuario conozca la codificacion de caracteres que se
emplee en el sistema local, y aun mas, esto no es conveniente si la
secuencia de clasificacion para el alfabeto local difiere del
ordenamiento de los codigos de caracteres. Por lo tanto, POSIX
extendio grandemente la notacion de corchetes, tanto para patrones de
comodines como para expresiones regulares. Antes vimos tres tipos de
elementos que pueden estar en una expresion de corchetes; a saber, (I)
la negacion, (II) caracteres simples explicitos, y (III) rangos. POSIX
especifica los rangos de una manera mas util internacionalmente y anade
tres tipos mas:
(III) Los rangos X-Y comprenden todos los caracteres que caigan entre X
e Y (incluidos) en la secuencia de clasificacion en curso segun se
defina en la categoria LC_COLLATE para la localizacion o escenario
actual.
(IV) Clases de caracteres nombradas, como
[:alnum:] [:alpha:] [:blank:] [:cntrl:]
[:digit:] [:graph:] [:lower:] [:print:]
[:punct:] [:space:] [:upper:] [:xdigit:]
de modo que uno pueda decir `[[:lower:]]' en vez de `[a-z]', con el
significado de cualquier letra minuscula, y esto funcione por ejemplo
tambien en Dinamarca, donde hay tres letras en el alfabeto despues de
la zeta. Estas clases de caracteres estan definidas por la categoria
LC_CTYPE en el escenario en curso.
(V) Simbolos de colacion, como `[.ch.]' o `[.a-acute.]', donde la
cadena entre `[.' y `.]' es un elemento de colacion definido por el
escenario en curso. Observe que esto puede ser un elemento multi-
caracter.
(VI) Expresiones de clase de equivalencia, como `[=a=]', donde la
cadena entre `[=' y `=]' es cualquier elemento de colacion de su clase
de equivalencia, segun se defina para el escenario en curso. Por
ejemplo, `[[=a=]]' podria ser equivalente a `[aaaaaaaa]' (aviso: esto
es Latin1); esto es, equivalente a `[a[.a-acute.][.a-grave.][.a-
umlaut.][.a-circumflex.][.a-tilde.][.a-ring.]]'.
V'EASE TAMBI'EN
sh(1), glob(3), fnmatch(3), locale(7), regex(7)