これ:
$ echo {{a..c},{1..3}}
次を生成します。
a b c 1 2 3
いいですが、説明するのは難しいです。
$ echo {a..c},{1..3}
与えられた
a,1 a,2 a,3 b,1 b,2 b,3 c,1 c,2 c,3
これはどこかに文書化されていますか?これバッシュリファレンスこれに対する言及はありません(たとえそれを使用する例がありますが)。
ベストアンサー1
さて、一度に一層ずつ解いてみましょう。
X{{a..c},{1..3}}Y
X{a..c}Y
X{1..3}Y
は(存在を通じて)に拡張されるものとして記録されX{A,B}Y
、それ自体は に拡張されるものとして記録されます。XA
XB
A
{a..c}
B
{1..3}
XaY
XbY
XcY
X1Y
X2Y
X3Y
入れ子にできることを文書化する価値があります(最初の項目は入れ子になっ}
ていません)。閉鎖{
例えば、最初のもの)。
私はシェルがこの問題を解決するために選択できると思います。内部にまず、中括弧は各端で順番に次のように動作します}
。
X{{a..c},{1..3}}
X{a,{1..3}}Y
X{b,{1..3}}Y
X{c,{1..3}}Y
(つまり、、where isとis
A{a..c}B
に拡張されます)AaB
AbB
AcB
A
X{
B
,{1..3}Y
X{a,1}Y
X{a,2}Y
X{a,3}Y
X{b,1}Y
X{b,2}Y
X{b,3}Y
X{c,1}Y
X{c,2}Y
X{c,3}Y
XaY
X1Y
XaY
Xa2
...
csh
しかし、私はこれが特により直感的であるか役に立つとは思いません(たとえば、コメントのKevinの例を参照してください)。拡張が実行される順序についてはまだあいまいさがあります。 70年代の拡張と比較して、後で{1..3}
(1995)で形が作られましzsh
た{a..c}
が、その後(2004)でbash
)が作られました。
参考にしてくださいcsh
(最初から2BSD(1979) マニュアルページ)は中括弧拡張が入れ子になる可能性があるという事実を文書化しますが、入れ子になった中括弧拡張がどのように拡張されるかを明示的に指定しません。しかし、あなたはできます。csh
1979年のコードを見てくださいそれがどのように行われたか見てください。ネストを明示的に処理する方法と、外部中括弧から始めて解析する方法を確認してください。
{a..c},{1..3}
とにかく拡張の影響が何であるかよくわかりません。ここで、,
演算子は中括弧で拡張されていないため(中括弧内にないため)、通常の文字として扱われます。