A verificação de um caractere alfabético é apenas uma questão de:
case $input in
([[:alpha:]]) echo one alpha character;;
(*) echo 'non-alpha or not one character (or non-character)';;
esac
O caractere é decodificado conforme o conjunto de caracteres / codificação do código do idioma, e o código do idioma é consultado novamente para verificar se está na classe de caracteres alfabética .
Verificar se $input
é um caractere é mais complicado.
case $input in
(?) echo one character
esac
Destina-se a verificar isso. No entanto, com a maioria dos shells, isso também retornará true se $input
contiver um byte que não forma um caractere válido. Para explicar o que você poderia fazer:
case $input in
([[:alpha:]]) echo one alpha character;;
(?)
n_chars=$(($(printf %s "$input" | wc -m)))
if [ "$n_char" -eq 1 ]; then
echo one character
else
echo one byte that is not a character
fi;;
("") echo empty;;
(*) echo anything else
esac