0
我正在玩一个用于学习目的的非感性脚本(只是写了一些变量作用域处理的示例)。我定义了几个变量是这样的:作为Zsh中的关联数组处理和拆分行
sb_var_global=TRUE
typeset sb_var_typeset=TRUE
typeset -g sb_var_typeset_g=TRUE
declare sb_var_declare=TRUE
declare -g sb_var_declare_g=TRUE
export sb_var_export=TRUE
typeset -gx sb_var_typeset_gx=TRUE
declare -gx sb_var_declare_g=TRUE
我然后显示出来,就像这样:
echo "Set variables ..."
set | grep sb_var_
echo "\n Environment variables ..."
env | grep sb_var_
这会产生这样的输出:
Displaying *set* variables ...
sb_var_declare=TRUE
sb_var_declare_g=TRUE
sb_var_export=TRUE
sb_var_func_declare_g=TRUE
sb_var_func_global=TRUE
sb_var_func_typeset_g=TRUE
sb_var_global=TRUE
sb_var_readonly=TRUE
sb_var_typeset=TRUE
sb_var_typeset_g=TRUE
sb_var_typeset_gx=TRUE
Displaying *env* variables ...
sb_var_export=TRUE
sb_var_typeset_gx=TRUE
sb_var_declare_g=TRUE
我开始尝试到输出处理作为一个关联数组,但我无法理解语法。
此遍历每行,然后执行针对每行(单独)的字符串扩展到每行分成一个阵列(不是我想要的):
for var in $(set | grep sb_var_); do
tokens=(${(s:=:)var})
print ${tokens[1]} ${tokens[2]}
done
的标准方式来处理一个关联数组是:
for key val in ${(kv)assoc_array}; do
echo "$key -> $val"
done
要使用此类型的语法的,我需要执行该命令替换,分割,因为它被返回的每一行,并存储在被直接传递到用于循环结构的关联数组的结果。我想这可能是这个样子:
for key val in ${(kv)${(s:=:)$(set | grep sb_var_)}}; do
echo "$key -> $val"
done
这是不完全正确,但并最终产生类似输出:
sb_var_declare -> TRUE sb_var_declare_g
TRUE sb_var_export -> TRUE sb_var_func_declare_g
TRUE sb_var_func_global -> TRUE sb_var_func_typeset_g
TRUE sb_var_global -> TRUE sb_var_readonly
TRUE sb_var_typeset -> TRUE sb_var_typeset_g
TRUE sb_var_typeset_gx -> TRUE
试图将其拆分,使其多了几分可管理,我一直无法弄清楚如何获取正确的语法,我最好的尝试是这样的(无效的语法):
declare -A values=${(s:=:)$(set | grep sb_var_)}
有什么建议?