Paradoxo sobre a-z x A-Z

1

Eu escrevi um script de shell para reconhecer o tipo de caractere

printf "Enter a character: "
read var
case "$var" in
[a-z])
        echo "You entered a lower case alphabet."
        ;;
[A-Z])
        echo "You entered an upper case alphabet."
        ;;
[0-9])
        echo "You entered a digit."
        ;;
?)
        echo "You entered a special simbol."
        ;;
*)
        echo "You entered more then one character."
        ;;
esac

Mas, se a letra de entrada for maiúscula ou minúscula, a saída é:

You entered a lower case alphabet.

A saída está correta se eu escrever desta forma:

printf "Enter a character: "
read var
case "$var" in
[A-Z])
        echo "You entered a upper case alphabet."
        ;;
[a-z])
        echo "You entered an lower case alphabet."
        ;;
[0-9])
        echo "You entered a digit."
        ;;
?)
        echo "You entered a special simbol."
        ;;
*)
        echo "You entered more then one character."
        ;;
esac

Não consigo descobrir o porquê. A única resposta lógica é [a-z] incluir caracteres minúsculos e maiúsculos.

    
por Aleksandre Gabunia 26.03.2014 / 06:58

1 resposta

1

O pedido léxico depende do local. As diferenças não estão restritas a caracteres "especiais" (por exemplo, ä like a em alemão, mas após z em finlandês). Em vez disso, em algumas localidades, a ordem pode ser AaBbCc… , portanto, [a-z] se expandirá para [aBbCc…Zz] . Os padrões [[:lower:]] e [[:upper:]] mencionados por Stephane Chazelas estão a salvo dessas surpresas.

    
por 01.04.2014 / 23:45