在bash中:
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,这意味着可以插入制表符和换行符等特殊字符,而不用调用编辑器命令。此外,粘贴的文本形成单个撤消事件,如果该区域处于活动状态,则粘贴的文本将替换该区域。
这个两元素数组包含用于启用和禁用该功能的终端转义序列。这些转义序列用于在 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 )