O que caracteres especiais representam em echo {A..z}?

3

Eu sei que podemos imprimir uma seqüência de letras do alfabeto usando o comando echo e experimentamos um pouco ao fazer isso.

Sequência de letras minúsculas

$ echo {a..z}
a b c d e f g h i j k l m n o p q r s t u v w x y z

Sequência de letras maiúsculas

$ echo {A..Z}
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Sequência de letras maiúsculas e minúsculas

$ echo {A..z}
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [  ] ^ _ ' a b c d e f g h i j k l m n o p q r s t u v w x y z

Agora esta é a parte que eu não entendo. Veja o special charcaters de Z para a. Aqui está uma visão melhor.

$ echo {a..Z}
a ' _ ^ ]  [ Z

Eu quero saber

  1. Como esses caracteres especiais vieram aqui entre letras maiúsculas e minúsculas?

  2. O que significa essa seqüência especial de caracteres?

  3. Além disso, como imprimo apenas essa sequência?

por C0deDaedalus 28.01.2018 / 10:25

1 resposta

4

{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 :-)

    
por 28.01.2018 / 10:33