{A..z} expande de acordo com a codificação de caracteres de sua localidade atual, que provavelmente é ASCII ou algo próximo a ela. Se você executar man ascii (no caso de ter isso no seu sistema) ou dar uma olhada em uma tabela ASCII , verá esses caracteres adicionais em entre Z e a (o mesmo que você obtém quando executa echo {Z..a} na verdade).
Para obter apenas caracteres maiúsculos / minúsculos, use
echo {A..Z} {a..z}
Para obter apenas os que estão no meio, você pode usar
typeset -a foo=($(echo {Z..a}))
echo ${foo[@]:1:((${#foo[@]} - 2))}
que cria uma matriz primeiro incluindo os dois caracteres fora do limite e depois acessa todos os elementos da matriz além dos caracteres de limite.
PS: Descobrir por que typeset -a foo=({Z..a}) não funciona é deixado como um exercício para o leitor :-)