当前位置:  开发笔记 > 编程语言 > 正文

通过通配符过滤zsh数组

如何解决《通过通配符过滤zsh数组》经验,为你挑选了1个好方法。

给定一个Zsh数组myarray,我可以将其做成一个子集数组

set -A subarray
for el in $myarray
do 
  if [[ $el =~ *x*y* ]]
  then
    subarray+=($el)
  fi
done

在此示例中,其中包含myarray中按顺序在某处具有xy的所有元素。

题:

鉴于zsh中可用的大量数组操作,是否有更简单的方法来实现这一点?我检查了手册页和zsh-lovers页,但是找不到合适的东西。



1> Adaephon..:

这应该可以解决问题

subarray=(${(M)myarray:#*x*y*z})

您可以在zsh联机帮助页的[关于参数扩展的部分]中找到说明。它有点隐藏,因为${name:#pattern}没有该标志的(M)作用与您想要的相反:

${name:#pattern}

如果pattern匹配的值name,则替换为空字符串;否则,为空。否则,只需替换的值name。如果name是数组,则删除匹配的数组元素(使用该(M)标志删除不匹配的元素)。

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有