stringtranslate.com

globo (programación)

En programación de computadoras , los patrones glob ( / ɡ l ɒ b / ) especifican conjuntos de nombres de archivos con caracteres comodín . Por ejemplo, el comando de shell Unix Bash mueve todos los archivos con nombres que terminan en desde el directorio actual al directorio . Aquí hay un comodín y un patrón global. El comodín significa "cualquier cadena de cualquier longitud, incluidos los caracteres vacíos, pero excluyendo los caracteres separadores de ruta ( en Unix y Windows)".mv *.txt textfiles/.txttextfiles**.txt*/\

El otro comodín común es el signo de interrogación ( ?), que representa un carácter. Por ejemplo, moverá todos los archivos nombrados con un solo carácter seguido de desde el directorio actual al directorio , mientras que coincidirá con todos los archivos cuyo nombre consta de 2 caracteres seguidos de .mv ?.txt shorttextfiles/.txtshorttextfiles??.txt.txt

Además de hacer coincidir nombres de archivos, los globos también se utilizan ampliamente para hacer coincidir cadenas arbitrarias ( coincidencia con comodines ). En esta capacidad, una interfaz común es fnmatch.

Origen

Una captura de pantalla de la página de referencia original de Unix de 1971 para glob: el propietario es dmr, abreviatura de Dennis Ritchie .

El comando glob, abreviatura de global , se origina en las primeras versiones de Unix de Bell Labs . [1] Los intérpretes de comandos de las primeras versiones de Unix (1.ª a 6.ª ediciones, 1969-1975) dependían de un programa separado para expandir los caracteres comodín en argumentos sin comillas a un comando: /etc/glob . Ese programa realizó la expansión y proporcionó la lista ampliada de rutas de archivos al comando para su ejecución.

Glob fue escrito originalmente en el lenguaje de programación B. Fue la primera pieza de software Unix principal que se desarrolló en un lenguaje de programación de alto nivel . [2] Posteriormente, esta funcionalidad se proporcionó como una función de biblioteca C , glob()utilizada por programas como el shell . Por lo general, se define en función de una función denominada fnmatch(), que prueba si una cadena coincide con un patrón determinado; el programa que utiliza esta función puede luego iterar a través de una serie de cadenas (generalmente nombres de archivos) para determinar cuáles coinciden. Ambas funciones son parte de POSIX : las funciones definidas en POSIX.1 desde 2001 y la sintaxis definida en POSIX.2. [3] [4] La idea de definir una función de coincidencia separada comenzó con wildmat (coincidencia con comodines), una biblioteca simple para comparar cadenas con globos de Bourne Shell.

Tradicionalmente, los globos no coinciden con archivos ocultos en forma de archivos de puntos Unix ; para que coincidan, el patrón debe comenzar explícitamente con .. Por ejemplo, *coincide con todos los archivos visibles y .*coincide con todos los archivos ocultos.

Sintaxis

Los comodines más comunes son *, ?y […].

Normalmente, el carácter separador de ruta ( /en Linux/Unix, MacOS, etc. o \en Windows) nunca coincidirá. Algunos shells, como Bash , tienen una funcionalidad que permite a los usuarios evitar esto. [5]

tipo Unix

En sistemas tipo Unix* , ?se define como arriba pero […]tiene dos significados adicionales: [6] [7]

También se permite que los rangos incluyan clases de caracteres predefinidas, clases de equivalencia para caracteres acentuados y símbolos de intercalación para caracteres difíciles de escribir. Están definidos para coincidir con los corchetes en las expresiones regulares POSIX. [6] [7]

La globalización de Unix es manejada por el shell según la tradición POSIX. La globalización se proporciona en nombres de archivos en la línea de comando y en scripts de shell . [8] La declaración obligatoria de POSIX caseen shells proporciona coincidencia de patrones utilizando patrones globales.

Algunos shells (como el shell C y Bash ) admiten una sintaxis adicional conocida como alternancia o expansión de llaves . Debido a que no forma parte de la sintaxis global, no se proporciona en case. Solo se expande en la línea de comando antes de globalizarse.

El shell Bash también admite las siguientes extensiones: [9]

Windows y DOS

El dircomando con un patrón global en IBM PC DOS 1.0.

El DOS original era un clon de CP/M diseñado para funcionar en los procesadores Intel 8088 y 8086 . Los shells de Windows, después de DOS, tradicionalmente no realizan ninguna expansión global en los argumentos pasados ​​a programas externos. Los shells pueden usar una expansión para sus propios comandos integrados:

Los programas de Windows y DOS reciben una larga cadena de línea de comandos en lugar de parámetros de estilo argv, y es su responsabilidad realizar cualquier división, cita o expansión global. Técnicamente no existe una forma fija de describir los comodines en los programas, ya que son libres de hacer lo que quieran. Dos expansores globales comunes incluyen: [12]

La mayoría de las demás partes de Windows, incluido el Servicio de Index Server, utilizan el estilo de comodines de MS-DOS que se encuentra en CMD. Esta sintaxis, una reliquia de la era de los nombres de archivos 8.3, presta especial atención a los puntos en el patrón y el texto (nombre de archivo). Internamente, esto se hace utilizando tres caracteres comodín adicionales: <>". En el extremo de la API de Windows, el equivalente de glob() es FindFirstFile y fnmatch() corresponde a su RtlIsNameInExpression subyacente . [14] (Otro análogo de fnmatch es PathMatchSpec ). Ambos expansores msvcrt de código abierto usan FindFirstFile , por lo que las peculiaridades de los nombres de archivos 8.3 también se aplicarán en ellos.

SQL

El operador SQL LIKE tiene un equivalente a ?y *pero no […].

SQL estándar utiliza una sintaxis similar a glob para la coincidencia de cadenas simples en su LIKEoperador, aunque el término "glob" no se usa generalmente en la comunidad SQL. El signo de porcentaje ( %) coincide con cero o más caracteres y el guión bajo ( _) coincide exactamente con uno.

Muchas implementaciones de SQL han ampliado el LIKEoperador para permitir un lenguaje de coincidencia de patrones más rico, incorporando rangos de caracteres ( […]), su negación y elementos de expresiones regulares. [15]

Comparado con expresiones regulares

Los globos no incluyen la sintaxis de la estrella Kleene , que permite múltiples repeticiones de la parte anterior de la expresión; por lo tanto, no se consideran expresiones regulares , que pueden describir el conjunto completo de lenguajes regulares en cualquier alfabeto finito determinado. [dieciséis]

Los globos intentan hacer coincidir la cadena completa (por ejemplo, S*.DOCcoinciden con S.DOC y SA.DOC, pero no con POST.DOC o SURREY.DOCKS), mientras que, según los detalles de la implementación, las expresiones regulares pueden coincidir con una subcadena.

Implementando como expresiones regulares

La implementación original de configuración automática del proxy de Mozilla , que proporciona una función de coincidencia global en cadenas, utiliza una implementación de reemplazo como RegExp como se indicó anteriormente. La sintaxis de los corchetes está cubierta por expresiones regulares en este ejemplo.

fnmatch de Python utiliza un procedimiento más elaborado para transformar el patrón en una expresión regular. [17]

Otras implementaciones

Más allá de sus usos en shells, los patrones globs también encuentran uso en una variedad de lenguajes de programación, principalmente para procesar la entrada humana. En los siguientes lenguajes de programación se encuentra una interfaz de estilo global para devolver archivos o una interfaz de estilo fnmatch para hacer coincidir cadenas:

Ver también

Referencias

  1. ^ "Sección 'Varios' del manual de Unix de la primera edición (PDF)" (PDF) . Archivado desde el original (PDF) el 29 de agosto de 2000 . Consultado el 11 de mayo de 2011 .
  2. ^ McIlroy, Doctor en Medicina (1987). Un lector de Research Unix: extractos comentados del Manual del programador, 1971-1986 (PDF) (Informe técnico). CSTR. Laboratorios Bell. 139.
  3. ^ ab fnmatch(3) -  Manual del programador de Linux - Funciones de biblioteca
  4. ^ glob(3)  –  Manual del programador de Linux – Funciones de biblioteca
  5. ^ https://www.gnu.org/software/bash/manual/bash.html#Pattern-Matching Manual de referencia de Bash
  6. ^ ab "Las especificaciones básicas de Open Group, edición 7, IEEE Std 1003.1, edición de 2013, 2.13. Notación de coincidencia de patrones".
  7. ^ ab "Manual del programador de Linux, GLOB (7)".
  8. ^ La "Guía avanzada de secuencias de comandos Bash, Capítulo 19.2: Globbing" (Mendel Cooper, 2003) tiene un conjunto conciso de ejemplos de patrones de globbing de nombres de archivos.
  9. ^ "Globos de golpe". Base de conocimientos de bash de Greg . Consultado el 25 de noviembre de 2019 .
  10. ^ ab "Coincidencia de patrones". Manual de referencia de Bash .
  11. ^ "Compatibilidad con caracteres comodín en parámetros de cmdlet". Microsoft . Red de desarrolladores de Microsoft.
  12. ^ "Expansión comodín". Red de desarrolladores de Microsoft. 2013.
  13. ^ "Expansión comodín". docs.microsoft.com . 2022-02-08.
  14. ^ Comodines en Windows. Blog de desarrollo de MSDN.
  15. ^ "ME GUSTA (Transact-SQL)". 2023-05-23.
  16. ^ Hopcroft, John E.; Motwani, Rajeev; Ullman, Jeffrey D. (2000). Introducción a la teoría, los lenguajes y la computación de los autómatas (2ª ed.). Addison-Wesley.
  17. ^ ab "Lib/fnmatch.py". Pitón. 2021-01-20 . Consultado el 10 de noviembre de 2021 .
  18. ^ "kthompson/glob". GitHub . Consultado el 6 de noviembre de 2020 .
  19. ^ "dazinator/dotnet.glob". GitHub . Consultado el 22 de junio de 2022 .
  20. ^ "std.path - Lenguaje de programación D - Digital Mars". dlang.org . Consultado el 8 de septiembre de 2014 .
  21. ^ "isaacs/minipartido". GitHub . Consultado el 10 de agosto de 2016 .
  22. ^ "jonschlinkert/micropartido". GitHub . Consultado el 4 de abril de 2017 .
  23. ^ "Ruta del archivo del paquete: el lenguaje de programación Go". Golang.org . Consultado el 11 de mayo de 2011 .
  24. ^ "Operaciones de archivos". Oráculo . Consultado el 16 de diciembre de 2013 .
  25. ^ "Glob-0.7.4: biblioteca global" . Consultado el 7 de mayo de 2014 .
  26. ^ "File::Glob - Extensión Perl para la rutina glob BSD". perldoc.perl.org . Consultado el 11 de mayo de 2011 .
  27. ^ "globo - Manual". PHP. 2011-05-06 . Consultado el 11 de mayo de 2011 .
  28. ^ "10.7. glob - Expansión del patrón de nombre de ruta de estilo Unix - Documentación de Python v2.7.1". Docs.python.org . Consultado el 11 de mayo de 2011 .
  29. ^ "'Rutina de biblioteca global ". Archivado desde el original el 19 de diciembre de 2007 . Consultado el 11 de mayo de 2011 .
  30. ^ "Clase: Directorio". Ruby-doc.org . Consultado el 11 de mayo de 2011 .
  31. ^ "#glob - Lib.rs". lib.rs. ​Consultado el 12 de noviembre de 2021 .
  32. ^ "Página del manual global de TCL" . Consultado el 16 de noviembre de 2011 .