Considere este script Bash:
#!/bin/bash
echo Enter any character
read char
case $char in
[a-z]) echo Lower case letter
;;
[A-Z]) echo Upper case letter
;;
[0-9]) echo Number
;;
?) echo Special char
;;
*) echo You entered more than one character
;;
esac
Si ingreso 'a', la salida es minúscula y es igual para 'A' ... ¿Cómo puedo superar esto?

echo if case then do.Respuestas:
Para obtener más información acerca de la expresión regular en minúsculas de [az] y la expresión regular en mayúsculas de [AZ] en bash, consulte ¿Por qué no se distingue entre mayúsculas y minúsculas cuando nocasematch está desactivado? .
fuente
[0-9]que pueda usar[[:digit:]]. Puede encontrar más ejemplos en las clases de caracteres posix deman grepGoogle .El problema es que el rango de caracteres en
[a-z]realidad incluye las letras mayúsculas. Esto se explica en el manual de bash :Para ilustrar:
Entonces, lo que sucede es que en su configuración regional (que no lo es
C),[a-c]es en realidad[aAbBcC]. Es por eso que debería usar las clases de caracteres POSIX como lo sugiere @karel en su lugar.fuente
LC_COLLATEaC, está bien que los otros valores de localización para ser diferente. EstablecerLC_COLLATEcualquier cosa, peroCrara vez es una buena idea, pero lamentablemente Ubuntu lo hace (no es el único culpable por el momento).