回显以“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,可以使用-m选项typeset来列出与模式匹配的变量:

$ 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

相关内容