other languages
other sections
GLOB(7) | Manual del Programador de Linux | GLOB(7) |
NOMBRE¶
glob - Generación de nombres de rutas de ficherosDESCRIPCIÓN¶
Hace mucho tiempo, en Unix V6, había un programa en /etc/glob que expandía patrones con comodines. Poco después este programa se convirtió en una orden incorporada en el shell.CONCORDANCIA DE COMODINES¶
Una cadena de caracteres es un patrón con comodines si contiene uno al menos de los caracteres `?', `*' o `['. La generación de nombres de caminos (en inglés, `globbing') es la operación que expande un patrón con comodines formando una lista de nombres de caminos de ficheros que concuerdan con el patrón. La concordancia se define así:Clases de caracteres¶
Una expresión entre corchetes `[...]' donde el primer carácter tras el corchete de apertura `[' no es un signo de cierre de admiración `!', concuerda con un carácter simple; a saber, cualquiera de los caracteres encerrados entre los corchetes. La cadena encerrada entre los corchetes no puede estar vacía; por ello, el corchete de cierre `]' puede estar entre los corchetes, siempre que sea como el primer carácter. (Así, `[][!]' concuerda con uno de los tres caracteres `['. `]' y `!'.)Rangos¶
Existe un convenio especial: dos caracteres separados por el guión `-' denotan un rango. (Así, `[A-Fa-f0-9]' es equivalente a `[ABCDEFabcdef0123456789]'.) Se puede incluir el guión `-' con su sentido literal poniéndolo como el primer o el último carácter entre los corchetes. (Así, `[]-]' concuerda justo con uno de los dos caracteres `]' o `-', y `[--/]' concuerda con uno de los tres caracteres `-', `.', ' /'.)Complementación¶
Una expresión `[!...]' concuerda con un carácter simple; a saber, cualquier carácter que no concuerde con la expresión obtenida al quitar el primer cierre de admiración `!' de ella. (Así, `[!]a-]' concuerda con cualquier carácter simple excepto `]', `a' y `-'.)NOMBRES DE CAMINOS¶
La expansión 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 comodín `?' ni `*', ni con un rango como `[.-0]'. Un rango no puede contener un carácter `/' explícito; esto llevaría a un error de sintaxis.LISTAS VACÍAS¶
La bonita y simple regla dada arriba: `expandir un patrón de comodines a una lista de nombres de caminos que concuerdan' fue la definición original de Unix. Le permitía a uno tener patrones que se `expandían' a una lista vacía, como enxv -wait 0 *.gif *.jpgdonde quizás no había ningún fichero GIF presente (y esto no es un error). Sin embargo, POSIX requiere que un patrón de comodines se deje sin cambios cuando sea sintácticamente incorrecto o cuando la lista de nombres de camino concordantes esté vacía. Con bash uno puede forzar el comportamiento clásico 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 requerirán
rm -f no-tal-fichero `find . -name "*~"`para evitar mensajes de error de rm llamado con una lista de argumentos vacía.)
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 expresión regular `*' significa cero o más copias de lo precedente.Clases de caracteres e internacionalización¶
Por supuesto los rangos significaban originalmente rangos ASCII, así que `[ -%]' significaba `[ !"#$%]' y `[a-z]' quería decir "cualquier letra minúscula". Algunas implementaciones de Unix generalizaron esto de forma que un rango X-Y significara el conjunto de caracteres cuyos códigos estuvieran entre los de X y los de Y. Sin embargo, esto requiere que el usuario conozca la codificación de caracteres que se emplee en el sistema local, y aún más, esto no es conveniente si la secuencia de clasificación para el alfabeto local difiere del ordenamiento de los códigos de caracteres. Por lo tanto, POSIX extendió grandemente la notación de corchetes, tanto para patrones de comodines como para expresiones regulares. Antes vimos tres tipos de elementos que pueden estar en una expresión de corchetes; a saber, (I) la negación, (II) caracteres simples explícitos, y (III) rangos. POSIX especifica los rangos de una manera más útil internacionalmente y añade tres tipos más:[: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 minúscula, y esto funcione por ejemplo también en Dinamarca, donde hay tres letras en el alfabeto después de la zeta. Estas clases de caracteres están definidas por la categoría LC_CTYPE en el escenario en curso.
VÉASE TAMBIÉN¶
sh(1), glob(3), fnmatch(3), locale(7), regex(7)12 Junio 1998 | Unix |