Glob

En programación de ordenadores glob es una abreviatura de global command, una biblioteca escrita en lenguaje C y muy utilizada en entornos Unix y GNU/Linux.[1]​ Se diferencia fácilmente de las expresiones regulares por su sencillez y sus diferentes equivalencias en cuanto a los caracteres comodines utilizados y su extenso uso fuera de su entorno. Su código fuente es ampliamente publicado por pertenecer a Software libre y cualquier persona puede consultarlo.[2]

Si bien dicha función tiene estrictas reglas de uso en programación, su utilidad es fácilmente comprensible para la mayoría de los programadores al punto tal que forma parte intrínseca del shell de muchos sistemas operativos (MS-DOS, GNU/Linux) e incluso otros lenguajes como SQL en su Lenguaje de manipulación de datos (DML Data Manipulation Language), Pascal y Python.

Historia

El comando ls utiliza glob para devolver listados de archivos, por ejemplo ls *.txt

Su uso se remonta a las primeras versiones de UNIX donde fue incluido desde 1971 como herramienta estándar. Inicialmente expandía el parámetro o parámetros utilizados y a su vez invocaba el mismo comando del cual fue invocado pero con el resultado o los resultados producido por glob.[3]​ Un ejemplo práctico y conocido es el uso del comando ls en GNU/Linux.

Con el paso de los años, de facto, se ha constituido de forma ubicua y la mayor parte de los programadores ignoran su uso como objeto y no lo incluyen directamente en sus programas. Por tanto, se apoyan de lleno en el soporte que prestan cada uno de los sistemas operativos que lo incluyen mediante POSIX y lo utilizan indirectamente. glob forma parte del conjunto de programas de utilidades comunes para apoyar la portabilidad de las aplicaciones a nivel de código fuente en POSIX. Hoy en día se ha derivado, en idioma inglés, a su uso como verbo, así pues es común decir a web server that supports globbing (un servidor web que tiene apoyo para consultas del tipo glob).

Comodines mayormente utilizados

Estrictamente hablando, en la función glob utiliza el asterisco, el signo de interrogación y el corchete.[2]​ De los comodines mayormente utilizados en otros entornos destacan el *(asterisco), %(signo de porcentaje), _(guion bajo), ?(signo de cierre de interrogación) y el signo de exclamación.

Lenguajes que contienen una utilería con el mismo nombre

A fin de hacerle mejoras en seguridad y uso, los desarrolladores de diferentes lenguajes se han dado a la tarea de incluir versiones para su propio uso, conservando e incluso reconociendo sus similitudes y origen:

  • El lenguaje Go en su paquete denominado filepath.[4]
  • El lenguaje Java en su paquete de file operations.[5]
  • El lenguaje Haskell implementado como System.FilePath.Glob (explícitamente reconocen que se parece a la biblioteca glob de acuerdo a POSIX).[6]
  • El lenguaje PHP le dedica un manual completo a la función pero indicando de manera indirecta a glob como está implementado como la mayoría de los SHELL de los sistemas operativos.[7]
  • El lenguaje Python, al igual que PHP reconoce también que funciona según normas POSIX (UNIX style) y le dedica un módulo completo al tema.[8]

Comparación con las Expresiones Regulares

Glob no incluye sintaxis para la Clausura de Kleene que permite múltiples repeticiones de las partes precedentes de la expresión; por lo tanto las expresiones en glob no pueden considerarse expresiones regulares, esto es, expresiones que pueden describir el conjunto completo de las expresiones regulares de un lenguaje dado en cualquier alfabeto finito.[9]

Common wildcard Expresión Regular Equivalente
? .
* .*

Véase también

Referencias

  1. https://www.gnu.org/software/libc/manual/html_node/Globbing.html
  2. a b «/* global command --». Google Code (en inglés). Archivado desde el original el 13 de mayo de 2013. Consultado el 19 de enero de 2018. 
  3. «List of commands at /etc/». Laboratorios Bell (en inglés). 11 de marzo de 1971. Archivado desde el original el 29 de agosto de 2000. Consultado el 19 de enero de 2018. «glob is used to expand arguments to the shell containing "*" or "?". It is passed the argument list containing the metacharacters; glob expands the list and calls the command itself.» 
  4. «Package filepath» (en inglés). 25 de mayo de 2011. Archivado desde el original el 25 de mayo de 2011. Consultado el 19 de enero de 2018. «Glob returns the names of all files matching pattern or nil if there is no matching file.» 
  5. «File Operations». Oracle Corporation (en inglés). Archivado desde el original el 16 de junio de 2017. Consultado el 19 de enero de 2018. «What Is a Glob? A glob pattern is specified as a string and is matched against other strings, such as directory or file names. Glob syntax follows several simple rules». 
  6. «System.FilePath.Glob» (en inglés). Archivado desde el original el 4 de marzo de 2016. Consultado el 19 de enero de 2018. «A library for globbing: matching patterns against file paths akin to the POSIX glob() function.» 
  7. «glob — Find pathnames matching a pattern». PHP org (en inglés). Archivado desde el original el 13 de noviembre de 2017. Consultado el 19 de enero de 2018. «The glob() function searches for all the pathnames matching pattern according to the rules used by the libc glob() function, which is similar to the rules used by common shells.» 
  8. «11.7. glob — Unix style pathname pattern expansion». Python Software Foundation (en inglés). Archivado desde el original el 13 de septiembre de 2017. Consultado el 19 de enero de 2018. «The glob module finds all the pathnames matching a specified pattern according to the rules used by the Unix shell, although results are returned in arbitrary order.» 
  9. Hopcroft, John E.; Motwani, Rajeev; Ullman, Jeffrey D. (2000). Introduction to Automata Theory, Languages, and Computation (2nd edición). Addison-Wesley. 

Enlaces externos