在 zsh 中打印所有以 foo 开头的变量

在 zsh 中打印所有以 foo 开头的变量

在bash中:

foo_a=1
foo_b=2
declare -p ${!foo_*}

输出:

declare -- foo_a="1"
declare -- foo_b="2"

我该怎么做桀骜

为什么不将上面的内容粘贴到桀骜甚至无法设置变量?似乎粘贴一段代码没有任何效果,除非所有粘贴的代码都成功?那是怎么回事?

答案1

  1. 如何打印以 开头的所有参数foo

    declare -p ${(Mk)parameters:#foo*}
    

    所有变量都存储在parameters关联数组中,因此打印其所有键(k)并搜索模式就足够了foo*。该标志的(M)存在是为了删除不匹配的元素。

    输出:

    typeset foo_a=1
    typeset foo_b=2
    

    (请注意,declare与 相同typeset)。


  1. 由于最近引入的功能,粘贴无法按预期工作括号内的粘贴:

    zle_bracketed_pa​​ste

    许多终端模拟器都有一项功能,允许应用程序识别文本何时粘贴到终端而不是正常键入。对于 ZLE,这意味着可以插入制表符和换行符等特殊字符,而不用调用编辑器命令。此外,粘贴的文本形成单个撤消事件,如果该区域处于活动状态,则粘贴的文本将替换该区域。

    这个两元素数组包含用于启用和禁用该功能的终端转义序列。这些转义序列用于在 ZLE 处于活动状态时启用括号粘贴,并在其他时间禁用它。取消设置该参数可以确保括号内的粘贴保持禁用状态。

    如果您不喜欢它,只需取消设置即可:

    unset zle_bracketed_paste
    

答案2

@jimmij 给出了一个很好的答案,这在一般情况下适用于打印关联数组中每个键的模式匹配。

然而,就环境变量而言,我在阅读 时zsh发现使用该命令有一个内置解决方案。typesetman 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 )
    

相关内容