
私は便利なので、コマンドラインで中括弧拡張を頻繁に使用します。
はい
{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
)。