web-dev-qa-db-ja.com

ZSH:プレフィックス付きのグロブ

シェルグロブ拡張に「プレフィックス」を追加することは可能ですか?私のユースケースは次のとおりです。複数のファイルを入力として渡すためにオプションフラグを繰り返す必要があるプログラムがあります。

$ ls
foo.txt bar.txt baz.txt
$ ./some-script.sh -a foo.txt -a bar.txt -a baz.txt 

ある種の拡張を使用して、'-a 'の各項目に*txtを追加できるようにしたいと思います。それは可能ですか? zshで? bash?

2
gregseth

これは、zshで、いわゆるglob qualifierzshexpnのマニュアルページのセクションGlob Qualifiersを参照してください。

_./some-script.sh *.txt(P:-a:)
_

説明のために私はマニュアルを引用します:

[〜#〜] p [〜#〜]string文字列は次のように付加されます各グロブは個別の単語として一致します。文字列は、上記のeglob修飾子の引数と同じ方法で区切られます。修飾子は繰り返すことができます。結果のコマンドラインに、glob修飾子のリストで指定されたのと同じ順序で単語が含まれるように、単語は個別に先頭に追加されます。

これの一般的な使用法は、ファイル名がすべて出現する前にオプションを付加することです。たとえば、パターン*(P:-f:)は、コマンドライン引数_-f file1 -f file2 ..._を生成します。

修飾子^がアクティブな場合、文字列は先頭に追加される代わりに追加されます。接頭辞と追加は独立して行われるため、両方を同じglob式で使用できます。例えばによって
コマンドライン引数を生成する*(P:foo:^P:bar:^P:baz:)を書き込む_foo baz file1 bar ..._

注意するために、最初に確認してください

_$ print ./some-script.sh *.txt(P:-a:)
./some-script.sh -a foo.txt -a bar.txt -a baz.txt 
_

希望する結果が得られた場合。

4
mpy