So che possiamo stampare una sequenza di lettere dell'alfabeto usando echo
comando e l'ho sperimentato un po' in questo modo.
Sequenza di lettere minuscole
$ 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
Sequenza di lettere maiuscole
$ 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
Sequenza di lettere maiuscole e minuscole
$ 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
Ora questa è la parte che non ottengo. Vedi i special charcaters
dalla Z alla a. Ecco una visione migliore.
$ echo {a..Z}
a ` _ ^ ] [ Z
Voglio sapere
-
Come sono arrivati questi caratteri speciali tra lettere maiuscole e minuscole?
-
Cosa significano queste sequenze di caratteri speciali?
-
Inoltre, come faccio a stampare questa sequenza solo nel mezzo?
Risposta accettata:
{A..z}
si espande in base alla codifica dei caratteri della locale corrente, che molto probabilmente è ASCII o qualcosa di simile. Se esegui man ascii
(nel caso tu lo abbia sul tuo sistema) o dai un'occhiata a una tabella ASCII vedrai questi caratteri aggiuntivi tra Z
e a
(lo stesso che ottieni quando esegui echo {Z..a}
effettivamente).
Per ottenere solo caratteri maiuscoli/minuscoli usa
echo {A..Z} {a..z}
Per ottenere solo quelli intermedi puoi usare
typeset -a foo=($(echo {Z..a}))
echo ${foo[@]:1:((${#foo[@]} - 2))}
che crea prima un array compreso i due caratteri appena fuori dal confine e quindi accede a tutti gli elementi dell'array oltre i caratteri di confine.
PS:capire perché typeset -a foo=({Z..a})
non funziona è lasciato come esercizio al lettore 🙂