Probablemente Usted ya usa caracteres de englobamiento sin saberlo. Cuando Usted especifica un archivo en Windows® o cuando busca un archivo, Usted usa * para hacer coincidir con una cadena arbitraria de caracteres. Por ejemplo, *.txt hace coincidir a todos los archivos cuyo nombre termina con .txt. Nosotros también los usamos mucho en la última sección. Pero el englobamiento va más allá que el simple *.
Cuando Usted ingresa un comando como ls *.txt y presiona Intro, la tarea de encontrar cuales archivos se corresponden con el patrón *.txt no la realiza el comando ls, sino el shell en sí mismo. Esto requiere de una pequeña explicación sobre como interpreta el shell la línea de comandos. Cuando Usted ingresa:
$ ls *.txt leerme.txt recetas.txt |
primero la línea de comandos se separa en palabras (ls y *.txt, en este ejemplo). Cuando el shell ve un * en una palabra, interpretará toda la palabra como un patrón de englobamiento y la reemplazará con los nombres de todos los archivos que se correspondan con el patrón. Por lo tanto, justo antes que el shell la ejecute, la línea se convirtió en la línea ls leerme.txt recetas.txt, lo que da el resultado esperado. El shell reacciona así frente a otros caracteres como:
? se corresponde con un único caracter (uno y sólo uno), cualquiera que sea este;
[...] se corresponde con cualquiera de los caracteres que se encuentran entre los corchetes; los caracteres pueden estar referidos por intervalos (por ejemplo, 1-9) o por valores discretos,o una mezcla de ambos. Ejemplo: [a-zBE5-7] se corresponderá con todos los caracteres desde la a hasta la z, una B, una E, un 5, un 6 o un 7;
[!...]: se corresponde con cualquier caracter que no se encuentre en los corchetes. [!a-z], por ejemplo, se corresponderá con cualquier caracter que no sea una letra minúscula[7];
{c1,c2} se corresponde con c1 o con c2, donde c1 y c2 también son patrones de englobamiento, lo cual significa que Usted puede escribir {[0-9]*,[acr]} por ejemplo.
Aquí tiene algunos patrones y su significado:
/etc/*conf: todos los archivos del directorio /etc cuyo nombre termine con conf. Se puede corresponder con /etc/inetd.conf, pero también con /etc/conf.linuxconf y también con /etc/conf si existe tal archivo: recuerde que * puede corresponderse con una cadena vacía.
imagen/{autos,espacio[0-9]}/*.jpg: todos los archivos cuyo nombre termina en .jpg en los directorios imagen/autos, imagen/espacio0, ... , imagen/espacio9, si es que dichos directorios existen.
/usr/share/doc/*/LEAME: todos los archivos denominados LEAME en todos los subdirectorios inmediatos del directorio /usr/share/doc. Esto hará que /usr/share/doc/mandrake/LEAME corresponda por ejemplo, pero no /usr/share/doc/miprog/doc/LEAME.
*[!a-z] Todos los archivos en el directorio corriente cuyo nombre no termine con una letra minúscula.
[7] ¡Cuidado! Aunque esto es cierto para la mayoría de los idiomas, puede no ser cierto bajo su propia configuración de idioma (locale). Esta característica depende del orden de comparación (collating order). En algunos sistemas, [a-z] se corresponderá con a, A, b, B, (...) , z. Y ni siquiera mencionamos el hecho que algunos idiomas tienen caracteres acentuados.