La Red de Conocimientos Pedagógicos - Currículum vitae - Juego de caracteres POSIX

Juego de caracteres POSIX

Recientemente estuve aprendiendo expresiones regulares y entré en contacto con el conjunto de caracteres POSIX. La ventaja de esta área de caracteres tradicional es que es fácil de entender y eficaz para abordar el problema de especificar rápidamente conjuntos de caracteres. . Pero aquí quiero contarles un poco de conocimiento al respecto. Primero, veamos cómo se utilizan los comodines para completar las operaciones de expansión de nombres de rutas. Sabemos que hasta cierto punto los campos de caracteres se usan casi de la misma manera que en las expresiones regulares, pero hay un problema:

jeremy@ubuntu:/tmp$ ls /usr/sbin/ [ABCDEFGHIJKLMNOPQRSTUVWXYZ] *

/usr/sbin/ModemManager /usr/sbin/NetworkManager

Este comando produce el resultado esperado de solo nombres de archivos que comienzan con letras mayúsculas, pero:

jeremy@ubuntu:/tmp$ ls /usr/sbin/[A-Z]*

/usr/sbin/bccmd /usr/sbin/pm-hibernate

/usr/sbin /biosdecode /usr/sbin/pm-powersave

/usr/sbin/bluetoothd /usr/sbin/pm-suspend

/usr/sbin/chat / usr/sbin/pm -suspend-hybrid

/usr/sbin/chgpasswd /usr/sbin/popcon-largest-unused

/usr/sbin/chpasswd /usr/sbin/ concurso-de-popularidad

/usr/sbin/chroot /usr/sbin/pppconfig

/usr/sbin/cpgr /usr/sbin/pppd

/usr /sbin/cppw / usr/sbin/pppdump

/usr/sbin/cracklib-check /usr/sbin/pppoeconf

/usr/sbin/cracklib-format /usr/sbin /pppoe-discovery

/usr/sbin/cracklib-packer /usr/sbin/pppstats

A través de este comando obtenemos resultados completamente diferentes (muchos resultados, solo se muestra una lista parcial de resultados). mostrado). ¿Por qué?

Esto se remonta a cuando Unix se desarrolló por primera vez, solo conocía caracteres ASCII y esta característica refleja ese hecho. En ASCII, los primeros 32 caracteres (números del 0 al 31) son códigos de control (como tabulaciones, retrocesos y retornos de carro). Los siguientes 32 caracteres (32 - 63) contienen caracteres imprimibles, incluidos la mayoría de los signos de puntuación y los dígitos del 0 al 9. Los siguientes 32 caracteres (64 - 95) contienen caracteres en mayúsculas y algo más de puntuación. Los últimos 31 caracteres (96 - 127) contienen letras minúsculas y más signos de puntuación.

Según esta disposición, el sistema utiliza esta regla de clasificación:

ABCDEFGHIJKLMNOPQRSNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSNOPQRSTUVWXYZ

Esto es diferente del orden normal del diccionario, es así:

AABBCCDDEEFFGGHGHGH yyzz

A medida que la popularidad de los sistemas Unix se extendió fuera de los Estados Unidos, surgió la necesidad de admitir caracteres que no estuvieran dentro del rango del inglés estadounidense. Entonces se amplió la tabla de caracteres ASCII, usando los 8 bits completos y agregando caracteres (números 128 - 255), acomodando así más idiomas. Para admitir esta capacidad, el estándar POSIX introduce un concepto llamado configuración regional, que se puede ajustar para seleccionar el juego de caracteres requerido para una configuración regional en particular, es decir, la configuración de idioma del sistema. Con esta configuración, las aplicaciones compatibles con POSIX utilizarán el orden de diccionario en lugar del orden ASCII. Esto explica el comportamiento del comando anterior. Cuando el rango de caracteres [A-Z] se interpreta lexicográficamente, contiene todas las letras excepto la letra minúscula "a", de ahí este resultado.