Bash:この中かっこ式はなぜこのように機能しますか?

Bash:この中かっこ式はなぜこのように機能しますか?

これはbash 4関連の問題です。私はbash中括弧の表現にある程度慣れていて、次を読んだ。手動しかし、実際にどのように機能するのか理解していません。

私の考えでは、これは何か関連があると思います。ASCIIテーブルしかし、私はそれを確認するためにbashソースコードを検索する習慣がないので、私の質問は次のようになります.

これはなぜecho {G..a}拡張されますか?

G H I J K L M N O P Q R S T U V W X Y Z [  ] ^ _ ` a

答え1

bashマニュアルで(ハイライト):

シーケンス式は、合計が整数または単一文字で、オプションで増分が整数である形式{x..y[..incr]}x取りyますincr。整数が指定されると、式はその間xのすべての数字に展開されますy。指定された整数の前にプレフィックスを付けて、0各項目の幅を同じにすることができます。xまたは、ゼロで始まると、シェルは、生成された yすべての用語に必要な場合はゼロパディングを使用して同じ桁数を含めようとします。 x文字が指定されると、式はデフォルトのCロケールを使用して、および間のすべての文字(含む)に辞書式に展開されます。y どちらもx同じyタイプでなければなりません。デルタが提供されると、各項目の差として使用されます。デフォルトの増分は適切に1または-1です。

文字範囲を使用した中括弧拡張は、との間の文字を受け入れますbash。したがって、表示されるのはASCIIテーブルG内との間の文字ですa(値はテーブルの順に表示されるため、デフォルトの増分は1です)。

標準ASCIIテーブルの最後の大文字(Z)と最初の小文字(a)の間には、次の文字があります。

[ \ ] ^ _ `

この順番で。

\シェルはエスケープされたスペース文字をリテラルスペースとして扱うため、出力されません。また、引用符のない逆引用符が出力されるため、次のような予期しないコード実行が発生する可能性があります。ステファンが指摘した2015年にメーリングリストに送信されたメッセージからbug-bash

しかし、ドキュメントで「入力」が何を意味するのかはわかりませんが{1..z}(拡張されていません)などの文字や数字は使用できないようです。

関連情報