コマンド置換を使用したグローバルスキーマのネストした部分の生成

コマンド置換を使用したグローバルスキーマのネストした部分の生成

簡単なファイル名の生成例から始めましょう。

echo (xx|yy|zz)*.txt  # Example 1

xx、yy、またはzzで始まるすべてのtxtファイルを一覧表示します。次に、コマンド置換を使用してこれらの代替を動的に生成しましょう。echoここでは「実際」の例を使って説明します。もちろん、いくつかのプログラムになります。

echo $(echo '(xx|yy|zz)')*.txt  # Example 2

上記のように動作します。今、トリッキーな部分があります。コマンドの置き換えは、代替リストの一部のみを提供する必要があります。

echo ($(echo 'xx|yy')|zz)*.txt  # Example 3 (does not work)

これはもう機能しません。 zz で始まるファイルは検索されますが、yy で始まるファイルは見つかりません。 Zshがここから始まるファイルを検索しているようですxx|yy

ヘルパー変数を使用すると、動作させることができます。

list=$(echo 'xx|yy')
echo (${~list}|zz)*.txt   # Example 4

今私の質問に答えてみましょう。

一時変数を使用せずに例4の効果を得ることはできますか?

答え1

ちょうど使用:

echo (${~"$(echo 'xx|yy')"}|zz)*.txt

単語の区切りを実行するのと同じように、コマンドの置き換えの周りに引用符を書き留めます。zshコマンド置換を使用する場合、基本的にグロービングが行われない場合は便利です。

echo (${~${(j:|:)$(cmd)}}).txt

cmdwithの出力にある単語を連結し、|それをglobとして解釈します。b単語自体をパターンと見なしたくない場合は、パラメータ拡張フラグも参照してください。

echo (${~${(j:|:)${(b)$(cmd)}}}).txt

関連情報