echo{A..z}の特殊文字は何を表していますか?

echo{A..z}の特殊文字は何を表していますか?

私はこのコマンドを使用してアルファベットの文字シーケンスを印刷できることを知っており、echoそのようにしていくつかの実験を行いました。

小文字のシーケンス

$ 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

大文字の連続

$ 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

大文字と小文字のシーケンス

$ 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

もう理解できない部分ですね。special charcatersZからaまでを参照してください。ここにはより良い景色があります。

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

知りたい

  1. これらの特殊文字は、大文字と小文字の間にどのように表示されますか?

  2. これらの特殊文字シーケンスはどういう意味ですか?

  3. そして、途中でこのシーケンスだけを印刷するにはどうすればよいですか?

答え1

{A..z}現在のロケールの文字エンコーディング(ほとんどのASCIIなど)に基づいて拡張されています。実行するかman ascii(システムにこのエントリがある場合)、ASCIIテーブルZとの間にこれらの追加文字が表示されますa(実際に実行したときに得られるものと同じecho {Z..a})。

大文字/小文字のみを取得するには、次のようにします。

echo {A..Z} {a..z}

真ん中にあるものを取得するには、次のものを使用できます。

typeset -a foo=($(echo {Z..a}))
echo ${foo[@]:1:((${#foo[@]} - 2))}

まず、配列を作成します。含む境界の外側の2文字、その後すべての配列要素にアクセスします。とは別に境界文字。

PS:うまくいかない理由を見つけることtypeset -a foo=({Z..a})は、読者の練習課題として残されます。 :-)

関連情報