組み合わせ爆発なしで複数のサポート拡張を実行するには?

組み合わせ爆発なしで複数のサポート拡張を実行するには?

私は便利なので、コマンドラインで中括弧拡張を頻繁に使用します。

はい

{foo,bar}

拡張:

foo bar

マルチ支柱の拡張も拡張されます。たとえば、次のようになります。

{foo,bar}Q{foo,bar}

次に拡張予定:

fooQfoo fooQbar barQfoo barQbar

これは、中かっこ拡張が順次使用される場合に予想される動作です。

私の質問

次に、中かっこ拡張(または他の短いコマンドライントリック)の出力を次のように作成したいと思います。

fooQfoo barQbar

注:私はbash 3.2

答え1

私はslmに同意します。中かっこ拡張でのみこれを行う方法を見たことはありません。

しかし、質問の例を使用すると、目的の出力を取得する最も簡単な方法は、中括弧の拡張と追加の後処理ではなくループを使用することです。

$ echo $(for X in foo bar;do echo ${X}Q${X};done)
fooQfoo barQbar

答え2

中かっこだけを使ってこれを行う方法がわかりません。私もこれを達成する方法が見つからなかったので、私よりスマートな人が方法を探さない限り不可能だと言いたい。

代わりに

サンプル

$ tree
.
|-- dir1
|   |-- file1
|   `-- file2
`-- dir2
    |-- file1
    `-- file2

はい

$ seq 2 | xargs -i{} echo dir{}/file{}
dir1/file1
dir2/file2

これは、次のコマンドに含めることができます。

$ echo $(seq 2 | xargs -i{} echo dir{}/file{})
dir1/file1 dir2/file2

またはこれ:

$ ls $(seq 2 | xargs -i{} echo dir{}/file{})
dir1/file1  dir2/file2

またはこれ:

$ ls -l $(seq 2 | xargs -i{} echo dir{}/file{})
-rw-rw-r-- 1 saml saml 0 Sep  2 03:18 dir1/file1
-rw-rw-r-- 1 saml saml 0 Sep  2 03:31 dir2/file2

なぜ中括弧が効果を発揮できないのですか?

元の例を見ると、次のようになります。

{foo,bar}Q{foo,bar}

次のように拡張されます。

fooQfoo fooQbar barQfoo barQbar

このメカニズムを拡張したメカニズムデカルト積

たとえば、

$ echo {A,B}{X,Y,Z}
AX AY AZ BX BY BZ

またはこれ:

$ echo {M,N}-{A,B}{X,Y,Z}
M-AX M-AY M-AZ M-BX M-BY M-BZ N-AX N-AY N-AZ N-BX N-BY N-BZ

次のような結果をもたらすデカルト積を生成することは不可能です。

fooQfoo barQbar

唯一のオプションは、次のトリックを使用することです。

$ echo dir{1,2}/file{2,1}
dir1/file2 dir1/file1 dir2/file2 dir2/file1

次に Bash 配列に入れます。

$ a=(dir{1,2}/file{2,1})
$ echo ${a[@]:1:2}
dir1/file1 dir2/file2

別のオプションは、上記のような「他の方法」です(使用xargs)。

引用する

関連情報