zsh から foo で始まるすべての変数を印刷します。

zsh から foo で始まるすべての変数を印刷します。

バッシュから:

foo_a=1
foo_b=2
declare -p ${!foo_*}

出力:

declare -- foo_a="1"
declare -- foo_b="2"

私は何をすべきですか?扱いにくい

上記の内容を貼り付けませんか?扱いにくい変数設定もできませんか?貼り付けたすべてのコードが成功しない場合は、コードを貼り付けても効果はありませんか?それは問題ですか?

答え1

  1. 次に始まるすべてのパラメータを印刷する方法foo

    declare -p ${(Mk)parameters:#foo*}
    

    parametersすべての変数は連想配列に格納されるため、(k)すべてのキーを印刷してパターンを検索するだけで十分ですfoo*。このフラグは、(M)一致しない要素を削除するために存在します。

    出力:

    typeset foo_a=1
    typeset foo_b=2
    

    (注、declareと同じtypeset)。


  1. 最近導入された機能のため、貼り付けは期待どおりに機能しません。かっこ内に貼り付ける:

    zle_bracketed_pa​​ste

    多くの端末エミュレータには、テキストを正常に入力するのではなく、端末に貼り付けるときにアプリケーションがそれを認識できるようにする機能があります。 ZLEの場合、これはエディタコマンドを呼び出さなくてもタブや改行などの特殊文字を挿入できることを意味します。また、貼り付けたテキストは単一のUNDOイベントを形成し、その領域が有効になっている場合はその領域を置き換えます。

    これら2つの要素の配列には、機能を有効または無効にするために使用される端末エスケープシーケンスが含まれています。これらのエスケープシーケンスは、ZLEが有効になっているときに角かっこ貼り付けを有効にし、他のときに無効にするために使用されます。このパラメータを設定解除すると、括弧内の貼り付けは無効になります。

    気に入らない場合は、設定を解除してください。

    unset zle_bracketed_paste
    

答え2

@jimmijは通常、連想配列の各キーのパターンマッチングを印刷するのに役立つ素晴らしい答えを提供しました。

しかし、環境変数に関する限り、zshこのコマンドを使用する組み込みソリューションがあることを読んで発見しました。typesetman zshbuiltins

typesetオプションを使用し-mて提供するだけです。引用符で囲む一致させたいパラメータ名のパターン。

パターンに一致する環境変数の印刷

  • 変数名のみ:

    typeset +m 'foo*'
    
    foo
    foo_fighters
    food
    
  • 変数名と代入:

    typeset -m 'foo*'
    
    foo=bar
    foo_fighters=awesome
    food=(my life)
    
  • 組版フラグ、変数名、指定値

    typeset -p -m 'foo*'
    
    typeset foo=bar
    typeset foo_fighters=awesome
    typeset -a food=( my life )
    

関連情報