「nlu​​_setting」で始まるすべての環境変数の名前と値をエコーし​​ます。

「nlu​​_setting」で始まるすべての環境変数の名前と値をエコーし​​ます。

nlu_settingで始まるすべての環境変数の名前と値をエコーする方法を探しているので、出力は次のようになります。

nlu_setting_json=true
nlu_setting_global=0
nlu_setting_bar=foo

これを行う方法を知っている人はいますか?

答え1

for var in "${!nlu_setting_@}"; do
    printf '%s=%s\n' "$var" "${!var}"
done

この拡張は、特定のプレフィックスと一致する変数名のリストを返す特定の拡張${!nlu_setting_@}です。bashここでは、文字列で始まるすべての名前を照会するためにこれを使用しますnlu_setting_。名前を繰り返し、変数値とともに名前を出力します。

変数の値を取得するには、変数間接指定()を使用します${!var}

答え2

この質問に対する回答を読んだ後、私は次の結論に達しました。

   compgen -A variable nlu_setting_ | while read v; do
            echo "$v = ${!v}";
   done

うまくいくようです。 compgenコマンドを聞いたことがありませんが、組み込みの汎用bashなら、すべてが大丈夫でしょう。

答え3

どちらの以前の答えも良いですが、自分だけの答えがあります。

env | grep ^nlu_setting_ | while read kv; do echo "$kv"; done

キーと値を区別せずにgrepを使用しますが、それは私が望むものです。それは環境変数にすぎず、正しい接頭辞で始まります。たぶん誰かがこのバリエーションを役に立つと思うかもしれません。

答え4

で同じタスクを実行したいユーザーのパターンに一致する変数を一覧表示するオプションがzshあります。-mtypeset

$ typeset -m 'nlu_setting_*'
nlu_setting_1=scalar
nlu_setting_2=( some array )
nlu_setting_3=( [associative]=array [now]=some )

タイプ情報を含めるには、次のようにします。

$ typeset -pm 'nlu_setting_*'
typeset nlu_setting_1=scalar
typeset -a nlu_setting_2=( some array )
typeset -A nlu_setting_3=( [associative]=array [now]=some )

名前がパターンと一致するパラメーターをリストします。

$ print -rC1 ${(kM)parameters:#nlu_setting_*}
nlu_setting_1
nlu_setting_2
nlu_setting_3

これ価値特殊連想配列の型$parametersは変数の型です。たとえば、スカラーのみをリストするには、次のようにします。

$ print -rC1 ${(kM)parameters[(R)scalar]:#nlu_setting_*}
nlu_setting_1

R逆添字を使用してください)。

以下を使用する代わりに、その名前と値を印刷するには、次を使用しますtypeset -m

$ for v (${(kM)parameters[(R)scalar]:#nlu_setting_*}) printf '%s=%q\n' $v ${(P)v}
nlu_setting_1=scalar

関連情報