glob(7) Miscellaneous Information Manual glob(7) NOMBRE glob - Generacion de nombres de rutas de archivos DESCRIPCION Tiempo atras, en UNIX V6 existia una aplicacion /etc/glob que expandia patrones con comodines. Actualmente es una orden integrada en la shell. Actualmentes, esta disponible una rutina de biblioteca glob(3) que efectua esta funcion en las aplicaciones de usuario. Las reglas son como sigue (POSIX.2, 3.13). Concordancia de comodines Se considera que una cadena de caracteres es un patron con comodines si contiene al menos uno de los siguientes caracteres '?', '*' o '['. La generacion de nombres de ruta ('globbing') es la operacion que expande un patron con comodines formando una lista de nombres de ruta de archivos 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 "[...]" donde el primer caracter tras el '[' no es '!' concuerda con un caracter simple; a saber, cualquiera de los caracteres entre corchetes. La cadena entre corchetes no puede estar vacia; por ello, ']' puede estar entre corchetes siempre que sea el primer caracter. Asi, "[][!]" concuerda con uno de los tres caracteres '[', ']' y '!'. Intervalos Existe un convenio especial: dos caracteres separados por '-' denotan un intervalo. (Asi, "[A-Fa-f0-9]" equivale a "[ABCDEFabcdef0123456789]".) Se puede incluir '-' con su sentido literal poniendolo como el primer o el ultimo caracter entre corchetes. (Asi, "[]-]" concuerda justo con uno de los dos caracteres ']' y '-' y "[--0]" concuerda con los tres caracteres '-', '.', '0', porque no es posible buscar concordancia de '/'.) Complementacion Una expresion "[!...]" concuerda con un caracter simple; a saber, cualquier caracter que no concuerde con la expresion obtenida al quitar el '!' 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 invertida o, en caso de formar parte de una orden de la shell, entrecomillandolos. Entre corchetes, estos caracteres se representan a si mismos. Asi, "[[?*\]" concuerda con uno de los cuatro caracteres '[', '?', '*' y '\'. Nombres de Ruta La expansion se aplica a cada uno de los componentes de un nombre de ruta por separado. '/' en un nombre de ruta no puede concordar con un comodin '?' ni '*', ni con un rango como "[.-0]". Un intervalo no puede contener '/'; constituye un error de sintaxis. El estandar POSIX especifica que los patrones incorrectos no debe modificarse. 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 vacias 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 archivo 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 ruta concordantes este vacia. Con bash uno puede forzar el comportamiento clasico mediante esta orden: shopt -s nullglob (Problemas similares ocurren por todas partes. Por ejemplo, si un antiguo script contiene rm `find . -name "*~"` una adapatacion moderna requerira rm -f no-tal-archivo `find . -name "*~"` para evitar mensajes de error de rm llamado con una lista de argumentos vacia.) NOTAS 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. Clases de caracteres e internacionalizacion Por supuesto los rangos significaban originalmente rangos ASCII, asique "[ -%]" significaba "[ !"#$%]" y "[a-z]" queria decir "cualquierletra 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 'z'. 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 "[aaaaa]"; esto es, equivalente a "[a[.a-acute.][.a-grave.][.a-umlaut.][.a-circumflex.]]". VEASE TAMBIEN sh(1), fnmatch(3), glob(3), locale(7), regex(7) TRADUCCION La traduccion al espanol de esta pagina del manual fue creada por Gerardo Aburruzaga Garcia , Miguel Perez Ibars y Marcos Fouces Esta traduccion es documentacion libre; lea la GNU General Public License Version 3 o posterior con respecto a las condiciones de copyright. No existe NINGUNA RESPONSABILIDAD. Si encuentra algun error en la traduccion de esta pagina del manual, envie un correo electronico a . Paginas de manual de Linux 6.06 31 Octubre 2023 glob(7)