バッシュから:
foo_a=1
foo_b=2
declare -p ${!foo_*}
出力:
declare -- foo_a="1"
declare -- foo_b="2"
私は何をすべきですか?扱いにくい?
上記の内容を貼り付けませんか?扱いにくい変数設定もできませんか?貼り付けたすべてのコードが成功しない場合は、コードを貼り付けても効果はありませんか?それは問題ですか?
答え1
次に始まるすべてのパラメータを印刷する方法
foo
:declare -p ${(Mk)parameters:#foo*}
parameters
すべての変数は連想配列に格納されるため、(k)
すべてのキーを印刷してパターンを検索するだけで十分ですfoo*
。このフラグは、(M)
一致しない要素を削除するために存在します。出力:
typeset foo_a=1 typeset foo_b=2
(注、
declare
と同じtypeset
)。
最近導入された機能のため、貼り付けは期待どおりに機能しません。かっこ内に貼り付ける:
zle_bracketed_paste
多くの端末エミュレータには、テキストを正常に入力するのではなく、端末に貼り付けるときにアプリケーションがそれを認識できるようにする機能があります。 ZLEの場合、これはエディタコマンドを呼び出さなくてもタブや改行などの特殊文字を挿入できることを意味します。また、貼り付けたテキストは単一のUNDOイベントを形成し、その領域が有効になっている場合はその領域を置き換えます。
これら2つの要素の配列には、機能を有効または無効にするために使用される端末エスケープシーケンスが含まれています。これらのエスケープシーケンスは、ZLEが有効になっているときに角かっこ貼り付けを有効にし、他のときに無効にするために使用されます。このパラメータを設定解除すると、括弧内の貼り付けは無効になります。
気に入らない場合は、設定を解除してください。
unset zle_bracketed_paste
答え2
@jimmijは通常、連想配列の各キーのパターンマッチングを印刷するのに役立つ素晴らしい答えを提供しました。
しかし、環境変数に関する限り、zsh
このコマンドを使用する組み込みソリューションがあることを読んで発見しました。typeset
man 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 )